有关数组指针

目录

一.前言

二. 数组指针的定义

三.数组指针的注意点


一.前言

        之前我们的指针都是指向变量的,那有没有指向数组的指针呢?答案肯定是有的,也就是我们的数组指针。

二. 数组指针的定义

        下面我们来通过一段代码实现对数组指针的定义。

int* p1=arr;
int* p2=&arr[0];

这两行代码都是都实现对数组指针的定义,两者虽然形式不一样,但都是获取了数组的首地址的指针。 

同理,我们可以使用之前在指针的运算中讲过的步长来遍历数组里面的每一个元素:

for(int i=0;i<len;i++){
printf("%d\n",*p1);
p1++;     //步长加一,指向数组的下一个元素
}

三.数组指针的注意点

        值得注意的是:当我们的数组arr参与计算的时候,指向它的指针会退化为指向第一个元素的指针。 

        当然也有特殊情况:当arr进行sizeof运算的时候,它不会退化,arr还是整体。还有就是用&arr获取地址的时候,它也不会退化。但是当使用&arr获取地址的时候,它的步长发生了改变,不再是int数据类型的4个字节了,而是整个数组的字节,也就是4个字节乘以数组的长度。

例如下面这段代码:

int arr[]={1,2,3,4,5,6,7,8};

printf("%zu\n",sizeof(arr));  //打印这个arr数组的整体长度 为8*4=32

printf("%p\n",arr);           //打印arr的首地址
printf("%p\n",&arr);


printf("%p\n",arr+1);         //打印arr走了一步之后的地址
printf("%p\n",&arr+1);        //两者不同获取首地址方式的步长

通过最后程序的运行结果,我们可以发现,使用&arr获取地址的步长,会是32个字节,而使用arr进行地址获取的步长,仍然是int数据类型的字节,也就是4个字节 。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值