目录
1.什么是指针?
指针在C语言中用来存放其他数据所占空间首地址的变量,而地址则相当于每个空间的的房间号,我们可以通过*解引用符号来操作指针从而达到实现改变该房间里的东西,实现对各种复杂数据的访问
2.指针变量的定义
由于不同类型的数据所占空间不一样,所以在定义指针变量时要指明该指针变量所指向的数据类型
例如:我们要存放一个int类型数据的地址
int *p=(&数据)
这里的*表示p是一个指针变量,int则表示该指针变量所指向的数据类型,而指针变量是用来存放地址的,所以我们需要用&取地址符号来得到该数据的地址
3.指针运算
指针之间也可以比较大小,进行相减,但仅限于同种类型的比较
指针之间比大小:如果相等,则说明两指针变量存放的地址相同
如果a>b,则说明b存放的地址在a的前面,反之则在a的后面
指针进行相减:用来计算两指针存放的地址相距的距离
同时,给指针加一或减一,则指针存放的地址会增加一个其所指数据的类型的空间大小,例如int类型的空间大小是4个字节,则int类型的指针变量加一则会在地址上增加4个字节
4.特殊的数据如何存放在指针里
数组的地址:一维数组会将首元素的地址存放在指针里
二维数组则会将第一行的地址存放在指针里
常量字符串:例"abcdefg"则会将a的地址存放进去,也就是首位数字
5.指针进阶
1.数组指针
居然指针是用来存放地址的,那么数组的地址也可以被存放吗?答案是可以的
首先,int是用来代表存放的数据类型,上面图例中,存放的是int类型的数组,则用int
其次,(*p)括号用来让*号与p结合,意指p是指针变量
最后,[10] 则是代表该数组有是个元素
以此类推
2.函数指针
看到这里可能有人懵了,函数指针?函数也有地址的吗?答案是有的,并且和数组一样,他的名字就是存放地址的地方
那么,函数指针怎么定义呢?
依旧是max函数,int 是指该函数的返回值
(*p)是用处与上述同意,括号让*号与p相结合,代表p是指针变量
(int,int)是值该函数的形参,形参名可以省略,但是形参类型不可以