指针和数组的关系

指针和数组的关系

很多人都分不清指针和数组之间的关系,严格的来讲指针和数组之间没关系,指针是指针,数组是数组。只不过他们两个都可以通过“*”引用的方式和下标的方式来访问元素而已。
例:

int a[5]={1,2,3,4,5};

int *p=a;

a[5]占20个字节的大小,而p只占4个字节的大小,其次p本身有自己的地址,只不过他里面存放的是数组首元素的地址。

要访问3则有两种方式:a[2]或者*(a+2).

其中(a+2)就是的形式访问的,因为a表示首元素的地址,加2表示向后偏移2个整形大小,找到3的地址,在通过*得到3.

在编译器中a[2]会被先解析成*(a+2)访问的。

数组指针和指针数组:

注意[]的优先级高于*,指针数组是一个数组,只不过里面的元素全部都是指针。数组指针是一个指针,指向数组的指针,偏移的单位是整个数组。

例:

int a[6]={1,2,3,4,5,6};

int (*p2)[6];

p2=a;

这是错误的,因为指针p2的类型是int [6],所以应该是p2=&a;

int (*p2)[3];

这样的话p2的类型是int [3],所以p2=(int(*) [3])&a; 要强制转换成数组指针的类型。

注意:数组指针“所指向”的类型就是去掉指针变量的名字之后所剩下的内容。

数组指针的类型就是去掉指针后剩下的内容。

例:int (*p3)[5];

p3的类型是 int [5];

p3所指向的类型是 int (*)[5];

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值