C语言指针学习总结(附代码)(二)

首先申明本文是个人学习总结,是凭借自己的理解总结的。其中一些理解可能有错误,欢迎指出。代码是自己跑通了的。

上一篇总结搞清楚了基本的指针和一维数组,这一篇写一下二维数组,二维数组和指针搞明白了多维的也就能明白了。先看下面这个图:
C语言指针学习总结(附代码)(二)_第1张图片这幅图表达了数组a在内存中的存储形式。a是3*3的二维数组,那么&a是0000,sizeof(a)是3x3x4=36个字节。&a[1]是0012,sizeof(a[1])是3x4=12个字节。sizeof(a[1][1])是int型,所以是4个字节。

#include
#include

int main(void)
{
	int a[3][3] = {1,2,3,4,5,6,7,8,9};
	int *p = (int*)(&a[1] + 1);
	int *q = (int*)(int*)(&a[1][0] + 1);

	printf("a的地址是:%d\n",a);
	printf("sizeof(a):%d\n", sizeof(a));

	printf("a[1]的地址是:%d\n", &a[1]);
	printf("sizeof(a[1])是:%d\n", sizeof(a[1]));
	printf("*p是:%d\n", *p);

	printf("a[1][0]的地址是:%d\n", &a[1][0]);
	printf("sizeof(a[1][0])是:%d\n", sizeof(a[1][0]));
	printf("*q是:%d\n", *q);

}

结果如下:
C语言指针学习总结(附代码)(二)_第2张图片

你可能感兴趣的:(C语言,指针,二维数组和指针)