深入理解指针3

1 字符指针变量

char* p = 'abcdef'   这里的赋值是将字符串首元素的地址赋值给p(常量字符串地址不能被改变)

当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始 化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。内容相同的常量字符串只存放一份地址

2 数组指针变量(与指针数组不同)

其实就是   数组指针--指向数组的指针--数组指针变量中存放数组的地址

arr--int*   arr+1跳过4个字节

 &arr--int(*)[10]   &arr+1 跳过40个字节

指针数组

1 是数组 是存放指针指针的数组   char* arr[5]

数组指针  1指针  指向数组     int (*p)[10];

二维数组传参 

⼆维数组传参本质上也是传递了地址,传递的是第⼀ ⾏这个⼀维数组的地址

arr[i] == *(arr+i)

arr[i][j] ==  (*(arr+i))[j]

不管是一维数组还是二维数组传参

形参可以写成数组,也可以写成指针     都要对数组名深入理解

函数指针变量

即存放函数的地址(函数也有地址)

arr和&arr有区别   但是Add和&Add没有区别都是函数的地址

且pf == Add,即Add(3,4)=pf(3, 4)==(*pf)(4,5)

两个有趣的代码

同时那个*也可以不写

另一个

函数定义

函数调用 Add(3,4);

函数声明  int Add(int ,int);

语法上不能如红色字体写

typedef关键字

typedef是⽤来类型重命名的,可以将复杂的类型,简单化。

指针类型也可以用

接下来简化第二个

函数指针数组

如int* arr1[10]  为整形指针数组

char* arr2[10] 为字符指针数组

那么每个元素为函数的地址 就叫做函数指针数组

这样使用

函数指针数组的用法:转移表

能够改进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值