1. 字符指针变量
1.1 简单例子
字符指针 char* 在C语言中主要由两种用法:
1.用于存放一个字符变量的地址。
2.用字符指针接收一个字符串。
这里并不是将整个字符串的地址存入 pstr 指针,指针变量 pstr 中存放的是常量字符串的首字符 h 的地址。
以一个字符数组类比,数组名就是数组首元素的地址。而且在c语言字符串通常是以字符数组的形式存储的,且以空字符( '\0' )结尾的。
因此很好理解 pstr 是字符串首字符的地址。
1.2 小题
《剑指offer》中收录了⼀道和字符串相关的笔试题,要求是判断下列代码的输出结果
其中,str1 和 str2 是两个不同的数组名,局部数组的创建会为其在栈区开空间。所以str1和str2分别指向两个不同的地址。
而字符串常量储存在只读数据段,也就是常量区。str3 和 str4 都指向字符串常量 "hello world."的首字符。所以str3 和 str4 指向同一个地址。
打印的结果如下:
2. 数组指针变量
2.1 定义
数组指针以后面两个字为主体,它是一个指针变量,存放的是数组的指针。
而数组指针相较于内置类型的指针就较为复杂,以存放 int 类型的数组举例:
p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个大小为10个整型的数组,int 表示该数组存放的数据类型。
2.2 初始化
数组指针变量是用于存放数组的指针,我们用&数组名的到的地址就可以对其初始化。
3. 函数指针变量
3.1 函数指针变量的创建
简单类比,函数指针变量应该是用来存放函数地址。而知道函数的地址,我们也就可以顺利的进行函数调用。
通过下面代码我们可以得知,函数名其实就是函数的地址。当然也可以用&函数名得到函数的地址。
而想要储存函数的地址,自然要创建函数指针变量。其写法与数组指针相似。
其中 pf3 为指针变量的名称,括号里的为函数的参数类型和个数,最前面的则为函数的返回值类型。
3.2 简单使用
用 Add 的指针调用该函数。
这里其实没必要取用函数的地址进行调用,因为函数名本身就是函数的地址。函数指针更多用回调函数等场景,以求对代码进行简化或优化。