指针与二维数组(示例)

#include <stdio.h>
int main()
{
	int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
		{
			printf("%d:%d ",&a[i][j],a[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	printf("%d %d %d\n",a,&a,*a);//0行首地址,数组a的起始地址,0行0列元素地址
	printf("%d %d %d\n",a+0,a+1,a+2);//0行首地址,1行首地址,2行首地址
	printf("%d %d %d\n",*a+0,*a+1,*a+2);//0行0列元素地址,0行1列元素地址,0行2列元素地址
	printf("%d %d %d\n",*(*a+0),*(*a+1),*(*a+2));//0行0列元素值,0行1列元素值,0行2列元素值
	printf("%d %d %d\n",*(a+0),*(a+1),*(a+2));//0行0列元素地址,1行0列元素地址,2行0列元素地址
	printf("%d %d %d\n",*(*(a+0)),*(*(a+1)),*(*(a+2)));//0行0列元素值,1行0列元素值,2行0列元素值
	printf("%d %d %d\n",*(a+0)+0,*(a+1)+1,*(a+2)+2);//0行0列元素地址,1行1列元素地址,2行2列元素地址
	printf("%d %d %d\n",*(*(a+0)+0),*(*(a+1)+1),*(*(a+2)+2));//0行0列元素值,1行1列元素值,2行2列元素值
	printf("%d %d %d\n",a[0],a[1],a[2]);//0行0列元素地址,1行0列元素地址,2行0列元素地址
	printf("%d %d %d\n",&a[0],&a[1],&a[2]);//0行首地址,1行首地址,2行首地址
	printf("%d %d %d\n",*a[0],*a[1],*a[2]);//0行0列元素值,1行0列元素值,2行0列元素值
	printf("%d %d %d\n",a[0][0],&a[0][0],*a[0]+0);//0行0列元素值,0行0列元素地址,0行0列元素值
	return 0;
}

附上某次运行的结果:


如有理解错误的地方,欢迎指正。

猜你喜欢

转载自blog.csdn.net/gsdxiaohei/article/details/79321402