多维数组的特定位置初始化

【8-1】编写一个数组的声明,把数组的某些特定位置初始化为特定的值。这个数组的名字应该叫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]

 

通过这个题目,可以很好的了解多维数组的初始化。

 

NumPy 是一个流行的 Python 库,用于进行科学计算和处理大型多维数组。在 NumPy 中初始化多维数组非常直接,有多种方法可以完成这一操作。以下是一些常用的方法: 1. 使用 `numpy.array()` 创建数组:可以将一个列表的列表(或者嵌套列表)作为参数传递给 `numpy.array()`,从而创建一个多维数组。 ```python import numpy as np # 创建一个二维数组 two_dim_array = np.array([[1, 2, 3], [4, 5, 6]]) ``` 2. 使用 `numpy.zeros()` 创建一个给定形状和类型的新数组,用零填充: ```python # 创建一个 2x3 的二维数组,所有元素都是零 zero_array = np.zeros((2, 3)) ``` 3. 使用 `numpy.ones()` 创建一个给定形状和类型的新数组,用一填充: ```python # 创建一个 3x2 的二维数组,所有元素都是 1 one_array = np.ones((3, 2)) ``` 4. 使用 `numpy.arange()` 结合数组的 `reshape()` 方法创建一个具有特定形状的数组: ```python # 创建一个一维数组,然后将其重新塑形为 3x2 的二维数组 arr = np.arange(6).reshape((3, 2)) ``` 5. 使用 `numpy.empty()` 创建一个未初始化的新数组,其形状和数据类型由用户指定。这个函数创建的数组中的数据是未初始化的,可能包含任意值。 ```python # 创建一个 2x3 的二维数组,但不指定初始值 empty_array = np.empty((2, 3)) ``` 以上方法可以灵活组合使用,以便根据需要创建和初始化多维数组。正确选择初始化方法对于确保程序性能和正确性非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值