多維陣列的特定位置初始化
阿新 • • 發佈:2021-02-04
編寫一個數組的宣告,把陣列的某些特定位置初始化為特定的值。這個陣列的名字應該叫char_value,它包含3×6×4×5個無符號字元。
下面的表中列出的這些位置應該用相應的值進行靜態初始化。
那些在上表未提到的位置應該被初始化為二進位制值0而不是字元’\0',注意:應該使用靜態初始化,在你的解決方案中不應該存在任何可執行程式碼!儘管並非解決方案的一部分,你可能很想編寫一個程式,通過列印陣列的值來驗證它的初始化,由於某些值並不是可列印的字元,所以請把這些字元用整型的形式打印出來(用八進位制或十六進位制輸出會更方便一些)。注意,用兩種方法解決這個問題,一次在初始化列表中使用巢狀的花括號,另一次則不使用,這樣你就能深刻理解巢狀花括號
首先看一下這個4維陣列的定義:
//3,6,4,5 { { { {0000, 0001,0002,0003, 0004}, {0010, 0011,0012,0013, 0014}, {0020, 0021,0022,0023, 0024}, {0030, 0031,0032,0033, 0034} }, { {0100, 0101,0102,0103, 0104}, {0110, 0111,0112,0113, 0114}, {0120, 0121,0122,0123, 0124}, {0130, 0131,0132,0133, 0134} }, { {0200, 0201,0202,0203, 0204}, {0210, 0211,0212,0213, 0214}, {0220, 0221,0222,0223, 0224}, {0230, 0231,0232,0233, 0234} }, { {0300, 0301,0302,0303, 0304}, {0310, 0311,0312,0313, 0314}, {0320, 0321,0322,0323, 0324}, {0330, 0331,0332,0333, 0334} }, { {0400, 0401,0402,0403, 0404}, {0410, 0411,0412,0413, 0414}, {0420, 0421,0422,0423, 0424}, {0430, 0431,0432,0433, 0434} }, { {0500, 0501,0502,0503, 0504}, {0510, 0511,0512,0513, 0514}, {0520, 0521,0522,0523, 0524}, {0530, 0531,0532,0533, 0534} }, }, { { {1000, 1001,1002,1003, 1004}, {1010, 1011,1012,1013, 1014}, {1020, 1021,1022,1023, 1024}, {1030, 1031,1032,1033, 1034} }, { {1100, 1101,1102,1103, 1104}, {1110, 1111,1112,1113, 1114}, {1120, 1121,1122,1123, 1124}, {1130, 1131,1132,1133, 1134} }, { {1200, 1201,1202,1203, 1204}, {1210, 1211,1212,1213, 1214}, {1220, 1221,1222,1223, 1224}, {1230, 1231,1232,1233, 1234} }, { {1300, 1301,1302,1303, 1304}, {1310, 1311,1312,1313, 1314}, {1320, 1321,1322,1323, 1324}, {1330, 1331,1332,1333, 1334} }, { {1400, 1401,1402,1403, 1404}, {1410, 1411,1412,1413, 1414}, {1420, 1421,1422,1423, 1424}, {1430, 1431,1432,1433, 1434} }, { {1500, 1501,1502,1503, 1504}, {1510, 1511,1512,1513, 1514}, {1520, 1521,1522,1523, 1524}, {1530, 1531,1532,1533, 1534} }, }, { { {2000, 2001,2002,2003, 2004}, {2010, 2011,2012,2013, 2014}, {2020, 2021,2022,2023, 2024}, {2030, 2031,2032,2033, 2034} }, { {2100, 2101,2102,2103, 2104}, {2110, 2111,2112,2113, 2114}, {2120, 2121,2122,2123, 2124}, {2130, 2131,2132,2133, 2134} }, { {2200, 2201,2202,2203, 2204}, {2210, 2211,2212,2213, 2214}, {2220, 2221,2222,2223, 2224}, {2230, 2231,2232,2233, 2234} }, { {2300, 2301,2302,2303, 2304}, {2310, 2311,2312,2313, 2314}, {2320, 2321,2322,2323, 2324}, {2330, 2331,2332,2333, 2334} }, { {2400, 2401,2402,2403, 2404}, {2410, 2411,2412,2413, 2414}, {2420, 2421,2422,2423, 2424}, {2430, 2431,2432,2433, 2434} }, { {2500, 2501,2502,2503, 2504}, {2510, 2511,2512,2513, 2514}, {2520, 2521,2522,2523, 2524}, {2530, 2531,2532,2533, 2534} }, } }
根據多維陣列的大括號分隔規則,整個維度沒有需要初始化得全部預設設定為0,其他按位置初始化特定值:
int main () { unsigned char char_value[3][6][4][5] = { {//0xxx 0 }, {//1xxx {//10xx 0 }, {//11xx {0},//110x {0,' '}//111x }, {//12xx {0},//120x {0},//121x {0,0,0,'A'},//122x {0,0,0,0, 'x'}//123x }, {//13xx {0},//130x {0},//131x {0,0,0xf3}//132x }, {//14xx {0},//140x {0},//141x {0,0,0,'\n'}//142x } }, {//2xxx {//20xx 0 }, {//21xx {0},//210x {0,0,0320},//211x }, {//22xx {0},//220x {0,'0'},//221x {0,0,'\''},//222x {0,'\121'}//223x }, {//23xx 0 }, {//24xx {0},//240x {0},//241x {0},//242x {0,0,'3',3}//243x }, {//25xx {0},//250x {0},//251x {0},//252x {0,0,0,0,125}//253x } } }; printf("['A' - %c]",char_value[1][2][2][3]); printf("[%d - %d]",' ', char_value[1][1][1][1]); printf("[0xf3 - %x]\n",char_value[1][3][2][2]); printf("['3' - %c] ",char_value[2][4][3][2]); printf("[%d - %d] ",'n',char_value[1][4][2][3]); printf("[%x - %x]\n",'\121', char_value[2][2][3][1]); printf("[3 - %d]",char_value[2][4][3][3]); printf("[125 - %d] ",char_value[2][5][3][4]); printf("['x' - %c]\n",char_value[1][2][3][4]); printf("[0320 - %o] ",char_value[2][1][1][2]); printf("[' - %c] ",char_value[2][2][2][2]); printf("['0' - %c]\n",char_value[2][2][1][1]); return 0; }
輸出:
['A' - A][32 - 32][0xf3 - f3]
['3' - 3] [110 - 10] [51 - 51]
[3 - 3][125 - 125] ['x' - x]
[0320 - 320] [' - '] ['0' - 0]
通過這個題目,可以很好的瞭解多維陣列的初始化。