本次与大家分享一些指针的知识,帮助大家进一步了解指针。废话就不多说了,直接进入正题;
首先,我们先回顾指针初步学习的几个重要的知识。
1.指针就是一个变量,用来存放地址,地址是一块空间的唯一标识
2.指针的大小是固定的,32位的是4字节,64位的是8字节.
3.指针是有类型的,类型决定了指针在加减整数的步长,指针在解引用的时候的权限
4.指针的运算。一般用于数组,两个地址的差的绝对值为元素个数。
思考以上这一行代码是什么意思呢?它真实存在吗?
答案是这一行代码在程序中是可以存在的,"hello"这串字符储存空间的首地址被存到了p中。由于"hello"是一个字符串常量,所以p是不能不能被更改的
说到这,我们不得不说说两个程序:
第一个是:
编译器在编译的时候,不会报错。但程序运行起来会崩。
当我们在char之前后程序才会报错,所以,我们在编写代码时,要严谨一点,加上const。
第二个是:
运行结果为:Stu1 and Stu2 are not the same
p1 and p2 are the same
你写对了吗?我们来分析一下原因:首先,两个数组开辟了两个不同的空间,空间不同地址自然也不同。第6行代码,执行把“hello”这个字符串常量常量储存到一个空间后把首元素的地址赋给p1,此时,这个字符串是不是有空间了。当第7行代码执行的时候,会把“hello”这个字符串所在空间的首元素地址赋给p2(这里不会另外再开辟一个空间去储存,你自己想想,同样的东西为啥要再存一遍,还存到一个不同的空间去)。
接下来我们讲讲指针数组
指针数组本质是一个数组。那指针数组怎么定义呢?
首先,定义一个数组arr[10],然后加上*表示数组的每个元素是指针,最后加上指针所对应内容的类型,我们以int为例。
当然,你也可以这样理解,类比整型数组定义,数组存放的是整型int,所以,定义为int arr[10],而指针数组存放的是指针int *,所以,定义为int *arr[10]
讲完指针数组,我们讲讲数组指针
数组指针本质上是一种指针。我们如何去定义数组指针呢?
我们可以类比其他指针的一个定义方式,我们以整型指针来举例类比
函数函数,函数有没有指针呢?
答案是有函数指针
函数指针怎么定义呢?它的方法与数组指针类似。
举个例子:
好了,到这里我们本次的分享就结束了。感觉对你有帮助的,可以给我点个赞,让我知道你有所收获。如果期待下一次的分享,可以给我点个关注噢。如果有兴趣的可以思考一以下两行代码,它们出自《c陷阱和缺陷》,下一篇文章我会对此做一个简单的分享