【无标题】二维数组名的含义区别和数组指针应用

本文详细解释了C语言中数组、指针在内存中的表示和操作,涉及数组名的含义、指针数组与数组指针的区别,以及元素的引用规则,帮助读者理解数组和指针在程序中的作用。
摘要由CSDN通过智能技术生成

并且在内存中一个数组占 4 个字节(整型),所以地址移动一位加 4
(指针大小是指 指针占多少字节,比如 int 2 个字节, float 4 个字节,指针在 32 位系统下占 4 个字
节, 64 位系统占 8 个字节,和地址没关系)
实际在内存中的排序
同时也可以 p[0]一直加到 11
p[1]加到 8
p[2]加到 5
p[3]加到 2 表示的都是 a[11]的值 12
二维数组的数组名含义(!!!!!):
首先,关于二维数组名有两个
1.int a[4][3];
a 就是一个数组名,先看这个数组名代表的含义
通过这个可以看出,a 和 a+1 之间相差 12,步长为 12,而我们
定义的就是一行三个元素,一个元素占 4 个字节,说明 a 代表的
是某行的首地址.说明数组名 a 指向的是某行,移动是一行一行
的移动。
2.a[1]也是一个数组名,众所周知它在二维数组中也代表首地址,
而它和 a 的区别来看一下

可以看出它的步长是4,既在数组中是一个元素一个元素的移动,

区别:

可以来验证一下他俩的地址表示

可以看出他俩表示的地址相同,

但是

加1之后,a[0]是跳到了下一行的首地址,而a是直接跨过了整个数组,所以可以看出,在使用方面,&a[0]和a的作用相同.

总结:

a指向的是数组中的一行,“&a”指向的是整个数组

a[i]指向的是i行元素的首地址,&a[i]指向的是i行

在运算符顺序中:

【】的优先级比*高,

int (*p)[3];

指针数组:

int *p【3】的分配顺序就是p【3】,首先定义p为一个数组,其次它是int *类型,所以p就是一个指针类型的数组,为指针数组.

数组长度为3,每个内容都是指针类型的,

数组指针:

int (*p)【3】的分配顺序就是p,首先定义p为一个指针,其次它是【3】数组类型,所以p就是一个数组类型的指针,为数组指针.

每个指针里边都有三个元素,一共有三个这样的指针。

数组指针的赋值:

数组指针的赋值:

可以直接数组名赋值

int (*p)[3] = a;   p指向数组a的第一行,a+1就指向第二行

int (*p)[3] = &a[0];  必须要加&符号,如果不加指向的就是某个元素的地址,而数组指针要指向某一行的地址

数组指针元素的引用:

声明:p【i】代表的肯定是一个地址,但它指向的是一个数,以下说的都是指向,并不是它代表的内容,因为咱们是以二维数组举例

p【0】指向的就是a【0】,第0行

p【1】指向的就是a【1】.....

如果单个引用元素的话:

p【0】+1:指向的就是a【0】【1】(就是p[0]数组里边的第一个元素的地址)

p【0】+2:指向的就是a【0】【2】(就是p[0]数组里边的第二个元素的地址

(二维数组其实就是特殊的一维数组,在电脑内存里存储的形式只有一维数组)

到这里之后还可以继续往后引用

p【0】+3:指向的就是a【3】的(如果超出了p[0],就去p[1]。。。。。直到最后一个元素)

。。。。。

p【0】+11:指向的就是a【11】(这里的a[11]是二维数组换成一维数组之后的内容)

就是说,前边的p【】可以引用后边的内容,但是后边的p【】不可以引用前边内容

到p【1】的话最多可以加到8

p【1】+8指向的就是a【11】

可见指向的内容也是a【11】

引用格式:

地址的引用:

*(p+i) = p【i】   指向的i行的首地址

*(a+i) =a【i】

*(p+i)+j = p【i】+j  指向的i行的后移j个位置的元素的地址(i行j列)

*(a+i)+j = a【i】+j

数组内容的引用:

*(*(p+i)+j)= *(p【i】+j)    指向的是i行后移j个位置元素,(i行j列)

*(*(a+i)+j)= *(a【i】+j)

小白的一些见解,如有不对望指出。.........
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值