在c语言学习中的问题(一):数组指针,指针数组,二维数组的理解与区分

作为在校的一枚学生,在日常的学习过程中产生了很多问题并在思考后对这些问题有了一定的理解,在此一一记录下来

数组指针和指针数组

形如int *p[10] 是指针数组

  • []的优先级高与,p先和[10]结合成一个数组,数组元素的类型是int*
  • 数组指针中每个元素都是个指针,所以,指针数组名p相当与一个二级指针int **a,在函数传递参数时,就可以int array(int **a)在main中传递int *p[10] ;array(p);

形如int (*p)[10] 是数组指针

  • 数组指针是一个指针指向一个数组,其中p是一个指针,p的类型是int(*)[10],p+1指向的值是4*10个字节(假设int类型是4个字节)
  • 指针数组的函数传参可以直接用指针类型参数,但是要主要类型名更改之后+1操作之后,增加的字节数的区别
  • int a[10],a代表的值是数组的首地址,那么&a的的值也是数组的首地址,但是两者的区别在与,a+1,代表之后4个字节,而,&a+1是之后的4*10=40个字节,&a代表的是整个数组的空间,对比第一条所诉,可分析出,数组指针类似与&a的意义

二维数组

在理解了数组指针和指针数组之后,我在分析二维数组时,又产生了新的问题,在数组指针和指针数组中数组名p一个可以理解为一个指向数组的指针,一个可以理解为一个二级指针,那么,二维数组名怎么理解呢?
int a[10][10] 起初我认为二维数组名a应该是一个二级指针,就如指针数组一般,二维数组*a就是指向数组的指针,那么**a就是数组的第一个值

但是后来,在网上查阅资料后,发现二维数组名可以理解为一个指向指针数组的指针 ,但是又不等于int **p,而是等于int (*p)[10]

,个人对这里还是很迷惑,希望有个能指点,并对我上面的看法错误的地方给予指出,万分感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值