C语言,数组与指针:int (*)p[4]; int *q; int a[4]; int b[3][4];

在学习C语言的过程中,相信很多朋友会碰到一些关于指针与数组方面的问题,特别是int (*p)[4],这个到底代表是什么,怎么才能更好的理解。

int a[4] = {1,3,5,7};// 一维数组

int b[3][4] = {{1,3,5,7},{2,4,6,8},{3,5,7,9}};// 二维数组

int *p;// p是指向整型变量的指针

int (*q)[4];  // q是指向一维数组(int (*) [4],并不是指向某个元素)的指针


p = a;

a代表首元素的地址,即&a[0]

注意:&a是代表整个数组(int(*)[4]

a+1 ==> &a[1],指针指到了a[1]的地址

&a+1 ==> 指针指向了数组a内存地址的末尾了(如果a是二维数组,则是下一行)

p = &a; 这是错误的写法,p为指向int *类型(即某一个整型变量的地址,如int number, a[0]),而&a类型为int(*)[4]


p = b[0];

q = b;

二维数组,即一维数组里面又有一维数组

数组名即表示首元素的地址,b的首元素是b[0]b[0]是一个一维数组(int(*)[]),所有二维数中的b[0]等同于一维数组a,b[0]表示的是b[0][0]的地址&b[0][0]

q是指向数组(数组int(*)[],不是数组的某一元素int *)的指针,所以 q = b


只要是理解数组名,&+数组名分别表示什么,指针指向的是什么类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值