您的位置:首页 > 其它

二维数组中的指针加法计算 与 初始化

2017-11-09 10:01 363 查看

二维数组中的指针加法计算

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
int a[3][4] = { {}, {1,2,3,4} }; //int[4] a[3]   T[3] a

//整体上来说
printf("sizeof(a)=%d  sizeof(int[3][4])=%d\n",
sizeof(a),sizeof(int[3][4]));      //3X4X4=48

//int[4] a[3] 元素访问
printf("sizeof(a[0])=%d sizeof(int[4])=%d\n",
sizeof(a[0]), sizeof(int[4]));

printf("==============================================\n");

#if 0

int[3][4]

1.首先 没加1的时候 他们的地址都是相同的,因为存放的物理结构是线性的

2.但是 他们代表的层次是不一样的 二维数组的名字a代表层次是行 也是首元素的首地址
因为是二维数组 所以这里的首元素是第一行整体

3.加& 理解为升* 二维数组的元素是一维数组 a[0]代表的层次就是一维数组
进行升*后 &a[0]就达到了二维数组的层次

#endif

printf("a=%p\n", a);
printf("&a=%p\n", &a);
printf("&a[0]=%p\n", &a[0]);
printf("a[0]=%p\n", a[0]);
printf("&a[0][0]=%p\n", &a[0][0]);

printf("---------------------------------------------\n");

printf("a+1=%p\n", a + 1); //a为二维数组的行的层次 对它+1后加的是 一行的大小为16

printf("&a+1=%p\n", &a + 1);//对a升*后 变成整个二维数组的层次 +1 加的是整个二维数组大小 为48

printf("&a[0]+1=%p\n", &a[0]+1);//对a[0]升* 后变成二维数组的行的层次(与a相同) 所以+1的大小为16

printf("a[0]+1=%p\n", a[0] + 1);//a[0] 为一维数组的层次 +1 加的一维数组之间的大小 为4

printf("==============================================\n");

printf("a[1]=%p\n",a[1]); //二维数组第二行的地址 可以由 a+1 或 &a[0]+1 得到
printf("a[1]+1=%p\n", a[1] + 1); //这个加1加的是4 为a[1]数组的步长 所以为4

return 0;
}


二维数组的初始化

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
//行缺省初始化
int b[3][4] = { {1}, {2,2}, {3} };

//全局缺省初始化(统一先排第一行)

int c[3][4] = {1,2,2,3};

//全部初始化
int a[3][4] = { {1,1,1,1}, {2,2,2,2}, {3,3,3,3} };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d\t", a[i][j]);
}
putchar(10);
}
printf("----------------------\n");

//二维数组行可以省略 而列不能省略
int d[][4] = { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 };

for (int i = 0; i < sizeof(d) / sizeof(d[0]); i++)  //利用sizeof求行数 size(d[0])可以想为int[4]
{                                                   //相当于用二维数组总长度 除以 一行的长度大小
for (int j = 0; j < 4; j++)
{
printf("%d\t",d[i][j]); //\t表示俩数之间空一大格子
}
putchar(10); //换到下一行  printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: