二維陣列初始化及首地址
阿新 • • 發佈:2019-01-05
#include<stdio.h> #include<stdlib.h> void main4() { int num[3][4]; //二維陣列相當於 元素為一維陣列的一維陣列 int number = 1; for (int i = 0; i < 12; i++) { num[i / 4][i % 4] = number++; //賦值之後再自增 printf("%d\n", num[i / 4][i % 4]); //3 * 4 = 12 則取num[3][4]第二個座標為標準 } system("pause"); } void main3() { //int num[3][4] = { 1 }; //定義時直接初始化,則未初始化的自動初始化為0 //num[3][4] = { { 1 }, { 5, 6 }, { 9 } }; //未直接初始化則需要指定單個元素進行初始化 //因為寫明下標即指定了某個元素 //錯誤的賦值方式 //num[0][] = { 1, 2, 3, 4 }; //int number[3][] = { 1, 2, 3 }; //num[0][1] = 1; int num[3][4] = { { 1 }, { 5, 6 }, { 9 } }; for (int i = 0; i < 12; i++) { //因為二維陣列相當於元素為一維陣列的一維陣列, printf("%d, %x\n", num[i / 4][i % 4], num + i); //所以num對應的是第一個一維陣列(相當於第一個元素)的首地址, if (i % 4 == 3) //所以加1則相當於加一個元素(一維陣列)大小,為4 * 4 = 16 putchar('\n'); } //1, e7fd24 //0, e7fd34 //0, e7fd44 //0, e7fd54 //5, e7fd64 //6, e7fd74 //0, e7fd84 //0, e7fd94 //9, e7fda4 //0, e7fdb4 //0, e7fdc4 //0, e7fdd4 printf("===============\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%d, %x\n", num[i][j], num[i] + j); //num[i]相當於第i + 1個一維陣列,也是其第一個元素的地址(也是一維陣列首地址) } //所以加 j 即其第j + 1個元素的首地址 putchar('\n'); //與 &num[i][j] 等價 } //== == == == == == == = // 1, e7fd24 // 0, e7fd28 // 0, e7fd2c // 0, e7fd30 // 5, e7fd34 // 6, e7fd38 // 0, e7fd3c // 0, e7fd40 // 9, e7fd44 // 0, e7fd48 // 0, e7fd4c // 0, e7fd50 //int number[2][] = { { 1 }, { 3 } }; //列數不可以省略,行數可以省略 //int number[][2] = { { 1 }, { 3 } }; //等價於 number[2][2] //printf("%d\n", number[1][1]); system("pause"); }