一、字符指针变量
《剑指offer》中收录了⼀道和字符串相关的笔试题,我们⼀起来学习⼀下
str1 and str2 are not same:
str1 和 str2 只是两个内容一样的不同数组,两个数组的首元素的地址是不一样的
str3 and str4 are same :
"hello bit."是字符串常量,放在只读常量区。
C 语言有字符串常量池优化:相同的字符串字面量,在常量区只存一份。
str3 和 str4 都保存这个唯一常量字符串的首地址,两个指针的值(地址)相同。
二、数组指针变量
1.数组指针变量是什么
字符指针变量:存放字符的地址,指向的是字符
ex:
char* pc
整型指针变量:存放的是整型变量的地址,指向的是整型变量
ex:
int n = 10;
int* pn = &n;
数组指针变量:存放数组的地址,指向的是数组
ex:
int arr[5];
int (*p)[5] = &arr;
2.数组指针类型应该怎么初始化
三、二维数组传参的本质
数组指针一般是在二维数组传参时才会使用
二维数组是一维数组的数组,二维数组的元素是一维数组,每一行就是一个元素,所以首元素就是第一行。
二维数组传参,形参的部分可以写成数组,也可以写成指针的形式
四、函数指针变量
1.函数指针变量的创建与使用
函数指针 -- 指向函数的指针
函数指针变量 -- 存放函数的地址
函数名也是函数的地址
来自《C陷阱与缺陷》的两段代码:
2.typedef关键字
typedef是用来类型重命名的,可以将复杂的类型简单化
由上图我们可以发现a是指针类型,b是整型类型。如果我们想同时把这两个变量设为指针类型,我们可以typedef,如下图
typedef 对数组指针与对函数指针的重命名
函数指针也是同理
五、函数指针数组
函数指针:存放函数地址的指针,指向一个函数。
函数指针数组:数组里的每一个元素都是函数指针,数组存储多个同类型函数的地址。
六、转移表
函数指针数组的用途:转移表(用函数指针数组实现的查表分支结构)