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

来源:互联网 发布:喜仕隆石英石 知乎 编辑:程序博客网 时间:2024/06/07 02:10

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

#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 0int[3][4]1.首先 没加1的时候 他们的地址都是相同的,因为存放的物理结构是线性的2.但是 他们代表的层次是不一样的 二维数组的名字a代表层次是行 也是首元素的首地址因为是二维数组 所以这里的首元素是第一行整体 3.加& 理解为升* 二维数组的元素是一维数组 a[0]代表的层次就是一维数组 进行升*后 &a[0]就达到了二维数组的层次 #endifprintf("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后加的是 一行的大小为16printf("&a+1=%p\n", &a + 1);//对a升*后 变成整个二维数组的层次 +1 加的是整个二维数组大小 为48printf("&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 加的一维数组之间的大小 为4printf("==============================================\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]数组的步长 所以为4return 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;}