1.字符指针变量
字符指针:char*
如图,这是一般使用方法,但还有另一种使用方法,如下图:
而从监视窗口中可以知道,s还是字符指针,指向字符i。
所以字符数组可以用来表示字符串,但它存储的还是第一个字符的地址,通过它可以访问一个字符串。
那么,字符数组与字符指针表示字符串有什么区别吗?
可以看到,字符数组中存放字符串,字符串的内容是可以修改的,而字符指针却不行。
这是因为字符指针存放的是字符串常量,虽然也是在一块连续空间存放多个字符,但常量字符串的内容是不能修改的。
上面图中的结果是str1与str2是不同的,str3与str4是相同的。
因为str1, str2是数组名,比较的就是数组首元素的地址,str1, str2分别向内存中申请空间存放一个字符串,所以str1, str2的地址是不同的
而str3, str4是指针变量,里面存放的是这个字符串的地址,因为字符串是相同的,那么str3 , str4 所指向的地址也就是相同的
2.二维数组传参本质
二维数组传参可以这样写:
一维数组传参本质上是传首元素的地址,C语言——深入理解指针2-CSDN博客,那么二维数组传参的本质是不是也是这个呢
二维数组可以看作是一个元素是一维数组的数组,那么传参时写数组名就是首元素的地址,也就是第一个一维数组的地址,所以二维数组传参也可以这样写:
写成数组指针的形式是没有问题的.
总结:二维数组传参时,形参既可以写成二维数组的形式,也可以写成数组指针的形式
3.函数指针变量
函数指针变量就是存放函数地址的,未来能够通过地址调用函数
可以看到,两个地址是相同的,所以函数名与&函数名都是函数地址
要注意,这两个是相同的,没有区别,与数组名和&数组名不同!!C语言——深入理解指针2-CSDN博客
函数指针的写法与数组指针是非常像的
这两种代码,第一个是函数,返回类型是int* ,第二个才是我们的函数指针变量与数组一样,*也要用()括起来,类型是int( * )(int,int),形参是可以不写的,只要指出了形参类型就可以了
既然函数名是函数地址,那么直接使用函数指针去调用函数也是可以的,如下图:
总结:
最后,求点赞,拜托了!