1. 程式人生 > 其它 >多維陣列的特定位置初始化

多維陣列的特定位置初始化

技術標籤:C和指標c語言

編寫一個數組的宣告,把陣列的某些特定位置初始化為特定的值。這個陣列的名字應該叫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]

通過這個題目,可以很好的瞭解多維陣列的初始化。