初识指针4の学习笔记

news2024/11/22 16:07:49

目录

 

1>>前言

2>>字符指针变量

3>>数组指针变量

4>>函数指针变量

5>>函数指针数组

6>>回调函数是什么?

7>>结语


 

1>>前言

        今天我会继续分享一些我做的笔记,以及我对指针的理解, 后续会持续分享指针几天,毕竟指针的内容太多了,一天我也学不完,也分享不完,感谢大家理解,希望我的文章对大家有所帮助,谢谢!

2>>字符指针变量

        afc4fffd80c64cb2ae72fecccdbca91a.png

这就是一个简单的字符指针变量,再来看:

fa4b7e970b014a9a976ce2bbc796c8ec.png

p1和p2有什么区别呢?两者的相同点是,这两个指针都取首字母地址,两个字符串都是连续的空间,不同点就是,p1所指向的是一个常量字符串,不能被修改,而p2指向的是一个数组,可以修改。通过下面这张图更好理解:

9a6100f897104293b96cb685c318d684.png

接下来我们来看剑指offer的一道题:以下代码运行结果是什么?

#include <stdio.h>

int main()
{
    char str1[] = "hello bit.";
    char str2[] = "hello bit.";

    const char* str3 = "hello bit.";
    const char* str4 = "hello bit.";

    if (str1 == str2)
        printf("str1 and str2 are same\n");
    else
        printf("str1 and str2 are not same\n");

    if (str3 == str4)
        printf("str3 and str4 are same\n");
    else
        printf("str3 and str4 are not same\n");
    return 0;
}

这个是正确答案:

24eb0ebed3214dbcbcb7b319bbaac638.png

可以看到str1和str2的结果不相同,str3和str4的结果相同,因为,st1和2是两个数组,虽然内容一样,但是它们在内存中毕竟是两个数组,地址肯定是不一样的,那为什么3和4相同呢?注意看前面的const修饰了指针,在创建3时,const定义了里面的内容不能被修改,那4又跟3一样,所以编译器会认为4跟3是同一个地址。

3>>数组指针变量

        首先来了解什么是数组指针变量,先前学的字符指针变量用来存放字符变量的地址,整形指针变量用来存放整形指针的地址,那么数组指针变量顾名思义,用来存放整个数组的地址。

int a[8];

int (*p)[8]=&a;  注意:这里存放的是整个数组的地址,并不是首元素地址

那p的类型是什么呢?a的类型是int  ,int* b中b的类型是int*,咦?好像都是除了变量名以外的东西,那可以知道p的类型就是 int(*)[8]

此时,对p解引用也就是*p得到的就是整个数组的地址,对p+1就跳过整个数组。

联系前面的博客,二维数组中每一个元素都是一个一维数组,那么二维数组传参时也就是传一维数组整个数组的地址。

int (*p)[8]=&a得知 p=&a

通过等价代换:*p=*&a        *p=a         所以对整个数组解引用就能得到首元素地址

4>>函数指针变量

        了解了数组指针变量后,函数指针变量也如它的名字一般,存放函数的地址。

前面可以知道数组指针变量的类型为: 数组类型(*变量名)[元素个数],那么函数指针变量就是,函数类型 (*变量名)(函数内置元素类型),请看

c20bde2fc1b34283831bcb57d4b90022.png

5562940ba6de4fac99ab4f5302a13199.png这就是函数指针变量,这个&符号可以省略。

如果想要调用函数,也可以使用p进行调用。

5>>函数指针数组

        函数指针数组就是存放函数指针的数组:

#include<stdio.h>
int add(int a,int b)
{
	return a+b;
}
int sub(int a,int b)
{
	return a-b; 
}
int main()
{
	int a=20;
	int b=10;
	int (*p1)(int,int)=add;
	int (*p2)(int,int)=sub;
	//int(*)(int,int)是函数指针类型 ,只需再*旁边加上数组名和元素个数即可。 
	int (* pp[2])(int,int)={add,sub};
	return 0;
}

int(*)(int,int)是函数指针类型 ,只需再*旁边加上数组名和元素个数就是函数指针数组,类型为int(*)(int,int)。那么怎么使用呢?可以用于一些判断条件,如:需要加时,调用pp[1],需要减时调用pp[2]等等。

6>>回调函数是什么?

        如果把函数的指针也叫地址,作为参数传给了另一个函数,当这个指针被用来调用所指向的函数时,被调用的函数就叫做回调函数。

#include<stdio.h>

int add(int a,int b)
{
	return a+b;
}
void test(int(*p)(int,int))//此时对p解引用就是add 
{
	int a=10;
	int b=20;
	int c=p(a,b);
	printf("%d\n",c); 
}
int main()
{
	test(add);
	return 0;
}

e20c5ea085614940994bc49297918793.png

此时add就叫做回调函数。可以理解为通过指针,在另一个函数被调用了

7>>结语

        今天又学习了很多内容,以学习笔记+经验的方式呈现给大家希望能得到大家喜欢谢谢大家!能看到这的我都坚信能有所收获,你的耐心给将来的你最大的帮助,谢谢观看!期待下篇与你的相见!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查看会议所属CCF级别(A/B/C类会议)

步骤&#xff1a; 1、打开中国计算机学会官网&#xff1a;中国计算机学会 (ccf.org.cn)。 2、搜索框中输入会议名称&#xff0c;例如&#xff1a;SIGKDD。 3、点击打开如图所示来源是“学术评价”的网页。 4、进入如下页面。 可以看到&#xff0c;SIGKDD是CCF A类会议。 参考…

低代码: 关于Test Driven Development - 测试驱动开发组件与测试示例

TDD 的开发方式 Test Driven Development - 测试驱动开发这是一种非常有意思的开发方式,我们进入一个实际场景,拿需要自研的colorpicker表单组件来说表单中的很多属性,都需要进行一个颜色的选择,如背景颜色,字体颜色等等我们来看一下相关设计交互在这里我们分两个图,点击…

python的导入包飘红

本文是mac的解决方法 1、点击pycharm-preferences-paython interpreter 直接搜索你要导入的包名&#xff0c;选择版本号点击 install 2、第二种方法是命令 pip3 install pandas2.2.2

学习文件IO,让你从操作系统内核的角度去理解输入和输出(理论篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

day06——前后端交互

一、计算属性 计算属性就是基于现有的数据推算出来的新属性&#xff0c;只要依赖的数据变化&#xff0c;新属性就会自动更新&#xff0c;而且计算属性多次调用的情况下只会计算一次&#xff0c;效率非常高 简化写法 const app new Vue({ el: #app, data: {}, methods: {//跟da…

易境通海运系统:打造海运专线稳定合作的强力引擎

对于海运专线而言&#xff0c;稳定的合作伙伴至关重要。在激烈的市场竞争中&#xff0c;如何持续保持客户的高满意度&#xff0c;不断强化自身优势&#xff0c;并提升用户粘性&#xff0c;是众多海运专线必须面对并解决的问题。而拥有一套可靠的系统&#xff0c;提供完备的服务…

会“坐”电梯,能避障碍,AGV无人搬运车进入各行各业

AGV 近年来&#xff0c;自动导引车&#xff08;Automated Guided Vehicle&#xff0c;简称AGV&#xff09;作为一种先进的物流设备&#xff0c;在制造业中广泛应用。AGV是一种能够自主行驶的无人驾驶车辆&#xff0c;通过内置的导航系统和传感器&#xff0c;实现对环境的感知与…

Loop Map 循环的几种方法

参考 Using entrySet() public void iterateUsingEntrySet(Map<String, Integer> map) {for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() ":" entry.getValue());} } Iterator<Map.Entry<String…

Apache CloudStack Official Document 翻译节选(七)

关于 Apache CloudStack 的 最佳实践 &#xff08;一&#xff09; Best Practices 部署Apache CloudStack是极具挑战性的&#xff0c;在整个部署过程中需要你做出形形色色的技术性选择。Apache CloudStack的配置条目是相当灵活的&#xff0c;这是因为在组合和配置具体条目时有…

手机谷歌浏览器怎么用

谷歌浏览器不仅在PC端受欢迎&#xff0c;在移动端也是广泛应用的。为了帮助大家更好的理解和使用手机谷歌浏览器&#xff0c;本文将详细介绍如何使用手机谷歌浏览器&#xff0c;对这款浏览器感到陌生的话就快快学起来吧。&#xff08;本文由https://chrome.cmrrs.com/站点的作者…

动手学深度学习7.6 残差网络(ResNet)-笔记练习(PyTorch)

本节课程地址&#xff1a;29 残差网络 ResNet【动手学深度学习v2】_哔哩哔哩_bilibili 29.2 ResNet为什么能训练出1000层的模型【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;7.6. 残差网络&#xff08;ResNet&#xff09; — 动手学深度学习 2.0.0 docume…

制造企业MES系统质检管理的应用

MES系统在质检管理中的作用 MES系统通过集成生产过程中的各个环节&#xff0c;实现对产品质量的全面监控和管理。其在质检管理中的作用主要体现在以下几个方面&#xff1a; 1. 实时数据采集&#xff1a;MES系统能够实时收集生产线上的质量数据&#xff0c;包括但不限于产品尺…

知识改变命运 数据结构【栈和队列面试题】

1.最小栈 class MinStack {Stack <Integer>stack;Stack <Integer>minStack; public MinStack() {stacknew Stack<>();minStacknew Stack<>();}public void push(int val) {stack.push(val);if(minStack.empty()) {minStack.push(val);} else {int top…

汇昌联信科技做拼多多电商怎么提升浏览量?

随着电子商务的蓬勃发展&#xff0c;各大平台之间的竞争变得日益激烈。在这样的背景下&#xff0c;汇昌联信科技如何通过有效的策略来提升其在拼多多平台上的店铺浏览量&#xff0c;成为了一个值得深入探讨的问题。提升浏览量不仅能够增加商品的曝光率&#xff0c;还能有效提高…

【设计模式】六大原则-下

❓首先什么是设计模式&#xff1f; &#x1f635;相信刚上大学的你和我一样&#xff0c;在学习这门课的时候根本不了解这些设计原则和模式有什么用处&#xff0c;反而不如隔壁的C更有意思&#xff0c;至少还能弹出一个小黑框&#xff0c;给我个hello world。 ✨ 如何你和我一样…

【python报错】‘XXX‘ object is not callable

‘XXX‘ object is not callable----这个报错通常是因为在代码中某一个变量的名字和函数的名字重复导致的&#xff0c;此时需要确定名称使用是否正确&#xff0c;如果重复则需要修改其中一个名字&#xff1b;如果名字没有问题&#xff0c;那就要看表达式写的对不对&#xff0c;…

使用 Lombok 遇到一个问题

起因是换了一个电脑&#xff0c;重新从服务器上拉了一个项目。项目是由maven构建的&#xff0c;在控制台中使用mvn命令编译项目时&#xff0c;没有任何问题&#xff0c;编译成功。如下图&#xff1a; 可是idea里面的源码&#xff0c;却标红了&#xff0c;如下&#xff1a; 错误…

猫咪掉毛很烦恼,希喂、小米哪个牌子的宠物空气净化器更好用?

随着养宠物人群变多&#xff0c;现在打着宠物专用旗号的空气净化器也越来越多&#xff0c;但是很多空气净化器对宠物的效果&#xff0c;真的是只有宣传上和宠物有关&#xff0c;实际设计和效果上和宠物毫无关系。需要大家擦亮眼睛&#xff0c;多做功课&#xff0c;才能不被那些…

如何在前端测试中,在F12中加入token

不止是token&#xff0c;cookie中其他的数据也都可以这样 首先打开F12&#xff0c;然后找到Application或者应用程序 然后找到cookie里面双击这里&#xff0c;输入token或者其他数据就可以了&#xff0c;后面输值。

网络安全术语全解析:筑牢数字防线的必备知识

在当今数字化时代&#xff0c;网络安全成为了至关重要的议题。了解网络安全术语是构建安全网络环境的基础&#xff0c;本文将为你详细介绍一系列常见的网络安全术语。 一、攻击相关术语 1. 恶意软件&#xff08;Malware&#xff09; 恶意软件是指在计算机系统上执行恶意任务…