加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

05/20 12:50
896
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

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

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

测试代码:

#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=%prn",p,p+1);  printf("sizeof(p)=%ldrn",sizeof(p));  printf("rnrn");    for(i=0;i<5;i++)    printf("y[%d]=%d, ",i,*(*q+i));  printf("q=%p,q+1=%prn",q,q+1);  printf("sizeof(q)=%ldrn",sizeof(q));  printf("rnrn");    for(i=0;i<5;i++)    printf("z[%d]=%d, ",i,*(*r+i));  printf("r=%p,r+1=%prn",r,r+1);  printf("sizeof(r)=%ldrn",sizeof(r));  printf("rnrn");    return 0;}

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

p[0]=12, p[1]=34, p[2]=56, p=0x7ffc08409000,p+1=0x7ffc08409008sizeof(p)=24
y[0]=1, y[1]=2, y[2]=3, y[3]=4, y[4]=5, q=0x7ffc08409023,q+1=0x7ffc08409028sizeof(q)=8
z[0]=6, z[1]=7, z[2]=8, z[3]=9, z[4]=10, r=0x7ffc08408fe0,r+1=0x7ffc08408ff4sizeof(r)=8

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

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

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

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
DS2431P+T&R 1 Maxim Integrated Products EEPROM, 1KX1, Serial, CMOS, PDSO6, ROHS COMPLIANT, TSOC-6
$3.87 查看
LAN9303I-ABZJ 1 SMSC Ethernet Transceiver, 8 X 8 MM, ROHS COMPLIANT, QFN-56
$8.26 查看
DS2431Q+T&R 1 Maxim Integrated Products EEPROM, 1KX1, Serial, CMOS, PDSO6, 3 X 3 MM, ROHS COMPLIANT, TDFN-6
$1.6 查看

相关推荐

电子产业图谱

公众号:物联网思考;主要记录、分享、思考开发中遇到的技术小细节,涉及嵌入式单片机、C语言、传感器、低功耗物联网等。偶尔也可能是程序员健康、职场潜规则、生活思考、行业讨论。