二维数组与指针的关系及二维数组的输出方法
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a[3][4] = { 1, 2, 3, 4, 10, 20, 30, 40, 100, 200, 300, 400 }; //int[4] a[3]
printf("a = %p\n", a);
printf("a+1 = %p\n", a + 1);
printf("a[1] = %p\n", a[1]);
printf("a[1] + 1 = %p\n", a[1] + 1);
printf("============================================================\n");
printf("a+1 = %p\t", a + 1); printf("a+1 +1 = %p\n", (a + 1) + 1); //a+1再+1加的是a的类型为 int[4]
printf("a[1] = %p\t", a[1]); printf("a[1]+1 = %p\n", a[1] + 1); //a[1]再+1加的是a[1]的类型为int
// printf("a+1 = %p\t",a+1); printf("a+1 +1 = %p\n",*(a+1)+1); // *(a+1) <> a[1] 将a+1解引用,降维成一维数组
// printf("a[1] = %p\t",a[1]);printf("a[1]+1 = %p\n",&a[1]+1); //&a[1] <> a+1 将a[1]引用,升维成二维数组
printf("a[1] = %p\t", a[1]); //二维数组元素中的 一个一维数组的地址
printf("a[1]+1 = %p\t ", a[1] + 1); //二维数组元素中的 一个一维数组元素中的 一个数的地址
printf("a[1]+1 = %d\t", *(a[1] + 1)); //二维数组元素中的 一个一维数组元素中的 一个数的值
printf("*(*(a+1)+1) = %d\n", *(*(a + 1) + 1)); //偏移指针法 通过二维数组的名字 输出二维数组中的值
printf("============================================================\n");
//下标法输出二维数组
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d\t", a[i][j]);
}
putchar(10);
}
//偏移指针法输出一个二维数组
for (int i = 0; i<3; i++)
{
for (int j = 0; j<4; j++)
{
printf("%d\t", *(*(a + i) + j));
}
putchar(10);
}
return 0;
}
小节:
1.二维数组名解引用,降维为一维数组名。 *(a + 1) <> a[1]
2.一维数组名,对其引用,升级为二维数组名。 &a[1] <> (a + 1)
3.&引用和*解引用互为逆向关系。
4.&与*不单单是 取地址 取内容 并且还是 引用 解引用 完成了类型的改变
2.一维数组名,对其引用,升级为二维数组名。 &a[1] <> (a + 1)
3.&引用和*解引用互为逆向关系。
4.&与*不单单是 取地址 取内容 并且还是 引用 解引用 完成了类型的改变