C语言的一些遗留问题(2):多维数组与指针

二维数组中运用指针的情况十分重要也是操作二维数组中几乎必不可少的操作,但是又因为相对理解的时候有点绕,所以如果长时间没有使用或者温习,就很容易遗忘,我们先以一个代码段来作为例子:

#include <stdio.h>

int main(){
	int zippo[4][2] = { {2,4},{6,8},{1,3},{5,7} };
	printf("zippo = %p ,  zippo + 1 = %p\n", zippo, zippo + 1);
	printf("zippo[0] = %p,   zippo[0] + 1 = %p\n", zippo[0], zippo[0] + 1);
	printf("*zippo = %p,   *zippo + 1 = %p\n", *zippo, *zippo + 1);
	printf("zippo[0][0] = %d\n", zippo[0][0]);
	printf("*zippo[0] = %d\n", *zippo[0]);
	printf("**zippo = %d\n", **zippo);
	printf("zippo[2][1] = %d\n", zippo[2][1]);
	printf("*(*(zippo + 2) + 1) = %d\n", *(*(zippo + 2) + 1));

	return 0;
}

以上代码段的输出结果如下:

zippo = 0099FE68 ,  zippo + 1 = 0099FE70
zippo[0] = 0099FE68,   zippo[0] + 1 = 0099FE6C
*zippo = 0099FE68,   *zippo + 1 = 0099FE6C
zippo[0][0] = 2
*zippo[0] = 2
**zippo = 2
zippo[2][1] = 3
*(*(zippo + 2) + 1) = 3

以上的所有情况基本上涵盖我们日常使用二维数组指针的所有情况,接下来我们一一的进行分析:
(1)首先zippo是二维数组的数组名,当他作为一个变量名输出的时候他表示的是一个地址,也就是这个二维数组的第一个元素所在的地址,也就是zippo[0][0]所在的地址。
(2)zippo + 1表示的也是一个地址值,+1我们理所当然的知道他是在zippo的基础上移动了一个单位,但是在这里是往下移动了一行,即表示的是zippo[1][0]的地址。
(3)zippo[0]表示的是zippo这个数组第0行的第一个元素的位置,也就是zippo[0][0]的地址。从结果上看我们也可以看出他的值和zippo的值是一样的,都是zippo[0][0]的地址值。
(4)zippo[0] + 1从形式上看,也是往后移动了一个单位,但是这里我们与zippo + 1做一下区分,zippo[0]+1我们可以看出限制了行号,因此zippo[0]+1是在第0行的基础上往后移动了一列,即就是zippo[0][1]的地址值,而上线的zippo+1因为没有限制行号,则表示的是下一行的首元素的地址值。

这里插一下对于*符号的认知,我们可以把他看作相当于一个解指针的一个操作,即对指针进行解套。
在二维数组中数组名后面每少一个索引值,就可以理解为加了一套,如zippo就是两层套,zippo[1]就是一层套,zippo[0][0]就没有套,就是一个实际的数值,而每加一个*就相当于结了一层套。

(5)* zippo可以由上面的方法看出,因为没有索引值,所以有两层套,加了一个 ,相当于去了一层套,就还剩一下一层套,因此 zippo也就是相当于zippo[0],也就是这个二维数组第0行的首元素的地址值。同理* zippo+1也就相当于zippo[0]+1也就是第0行的第二个元素的地址值。
(6)zippo[0][0]就非常简单了就是一个简单的数值。
(7)* zippo[0],同样上面的方法,只有一个索引值,相当于有一层套,前面又有一个 ,相当于解套了,没有套了,那他就是一个具体的数值了,相当于zippo[0][0]。
(8)
* zippo同理,没有索引值,但是前面有两个符号,就相当于抵消了,彻底解套,因此也是一个具体的数值,相当于zippo[0][0]和 zippo[0]。
(9)对于*(* (zippo + 2) + 1),我们从括号里面往外分析。(zippo+2)相当于是zippo数组第2行的首地址值,((zippo+2))+1就是第2行的第1个元素的地址值,前面在加一个*就相当于取这个地址上的数值,整个表达式也就是表示该二维数组第2行的1个元素的数值,即zippo[2][1],也就是3。

发布了12 篇原创文章 · 获赞 0 · 访问量 241

猜你喜欢

转载自blog.csdn.net/weixin_41902922/article/details/104072155
今日推荐