指针与数组总结

指针与数组总结
1.&表示取地址 *表示取内存数据(在一些复杂表达式中可能是乘法的意思,注意区别)
2.数组中 
数组名表示首层首个元素的地址
&a表示变量的地址  若为数组指针赋值时表示指针偏移量为数组大小(byte)
一维数组

int a[3]={1,2,3};
int *p1=a;//等同于 int *p1=a[0];偏移量为4
int *p2=&a;偏移量为12
a[1]==*(a+1)==p[1]==*(p+1)

二维数组 数组的元素是一个数组

int a[2][3]={1,2,3,4,5,6};
int *p1=a;//等同于 int *p1=&a[0];偏移量为12
int *p2=&a[0][0];//等同于 int *p2=a[0];偏移量为4
a+1//a[1]地址
*(a+1)//a[1]
*(*(a+1)+1)==*(a[1]+1)//等于a[1][1] a换成p同理 只是说a不可变 p可变
a[1]+1//a[1][1]的地址

多级指针

int *p1;
int **p2=&p1;此时*p2=p1;**p2=*p1
int **p2=p1;是错误的 因为声明的类型不符 即偏移量不同

总结
理解  p2指针指向的是一个一级指针类型 若不是则错误
同理int *p3[2]指针数组储存的也是一级指针地址 p3==&p3[0]  p3[0]即是一个指针 显然是二级指针
int (*p4)[3]是一个行指针  偏指向一个数组 移量为12 不能为**p赋值 不是二级指针
至于对于二维数组可以使用p4+1 因为后面的空间开辟了
int a[2][3];
a[0]就是一个元素 或 数组

因此赋值是否正确要看声明的类型

void型指针
没有偏移量的指针
赋值时会强转 可以赋不同类型的值
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun531921

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值