前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于指针数组和数组指针的理解与测试

关于指针数组和数组指针的理解与测试

作者头像
ManInRoad
发布2024-05-21 20:27:48
640
发布2024-05-21 20:27:48
举报
文章被收录于专栏:物联网思考物联网思考

先简单说一下两个的概念,

指针数组:是一个数组,数组中的每个元素都是指针,例如 char *p[3];

数组指针:是一个指针,指向数组,例如 int (*q)[3];

测试代码:

代码语言:javascript
复制
#include <stdio.h>

int main()
{
  int i=0;
    
  char a=12,b=34,c=56;
  char *p[3]={&a,&b,&c}; //指针数组
  
  char y[]={1,2,3,4,5};
  char (*q)[5]=&y;       //数组指针
  
  int z[]={6,7,8,9,10};
  int (*r)[5]=&z;        //数组指针
  
  for(i=0;i<3;i++)
    printf("p[%d]=%d, ",i,*p[i]);
  printf("p=%p,p+1=%p\r\n",p,p+1);
  printf("sizeof(p)=%ld\r\n",sizeof(p));
  printf("\r\n\r\n");
  
  for(i=0;i<5;i++)
    printf("y[%d]=%d, ",i,*(*q+i));
  printf("q=%p,q+1=%p\r\n",q,q+1);
  printf("sizeof(q)=%ld\r\n",sizeof(q));
  printf("\r\n\r\n");
  
  for(i=0;i<5;i++)
    printf("z[%d]=%d, ",i,*(*r+i));
  printf("r=%p,r+1=%p\r\n",r,r+1);
  printf("sizeof(r)=%ld\r\n",sizeof(r));
  printf("\r\n\r\n");
  
  return 0;
}

在64位windows下运行结果如下:

代码语言:javascript
复制
p[0]=12, p[1]=34, p[2]=56, p=0x7ffc08409000,p+1=0x7ffc08409008
sizeof(p)=24

y[0]=1, y[1]=2, y[2]=3, y[3]=4, y[4]=5, q=0x7ffc08409023,q+1=0x7ffc08409028
sizeof(q)=8

z[0]=6, z[1]=7, z[2]=8, z[3]=9, z[4]=10, r=0x7ffc08408fe0,r+1=0x7ffc08408ff4
sizeof(r)=8

通过获取各个指针的大小可以发现,windows指针大小占用8个字节,p是指针数组,且有三个元素,所以占用大小是3*8=24个字节;q和r分别是char和int类型的数组的指针,所以都只占用8个字节。

所以,指针数组是某一类指针的合集,是一个数组;

数组指针仅仅是一个指针,指向数组。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档