Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于从二维动态数组中检索值 const int Rbn_Row=24,Rbn_Col=32; Map=(char**)malloc(Rbn_Col*sizeof(char*); 对于(int Cnt=0;Cnt_C_Arrays_Multidimensional Array - Fatal编程技术网

关于从二维动态数组中检索值 const int Rbn_Row=24,Rbn_Col=32; Map=(char**)malloc(Rbn_Col*sizeof(char*); 对于(int Cnt=0;Cnt

关于从二维动态数组中检索值 const int Rbn_Row=24,Rbn_Col=32; Map=(char**)malloc(Rbn_Col*sizeof(char*); 对于(int Cnt=0;Cnt,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,使用第一个malloc创建一个32指针的连续数组。在for中,为这些指针指定了一个新值,现在它们引用了另一个内存。所以,若你们取Map+3,你们并没有引用第一行第三列,但它引用了第三行 如果需要连续内存,还可以创建一个简单的一维数组: const int Rbn_Row = 24, Rbn_Col = 32; Map = (char**)malloc(Rbn_Col * sizeof(char*)); for (int Cnt = 0; Cnt < Rbn_Col; Cnt++)

使用第一个malloc创建一个32指针的连续数组。在for中,为这些指针指定了一个新值,现在它们引用了另一个内存。所以,若你们取Map+3,你们并没有引用第一行第三列,但它引用了第三行

如果需要连续内存,还可以创建一个简单的一维数组:

const int Rbn_Row = 24, Rbn_Col = 32;

Map = (char**)malloc(Rbn_Col * sizeof(char*));
for (int Cnt = 0; Cnt < Rbn_Col; Cnt++)
    *(Map + Cnt) = (char*)malloc(Rbn_Row * sizeof(char)); /* <--- line 5       */

Map[2][3]=99;
printf("%d\n", Map[2][3]);                                /* <--- works        */
printf("%d\n", *(Map+2*Rbn_Col+3));                       /* <--- doesn't work */
现在您可以连续访问:

Map = malloc(Rbn_Row * Rbn_Col * sizeof(char));

使用第一个malloc创建一个32指针的连续数组。在for中,为这些指针指定了一个新值,现在它们引用了另一个内存。所以,若你们取Map+3,你们并没有引用第一行第三列,但它引用了第三行

如果需要连续内存,还可以创建一个简单的一维数组:

const int Rbn_Row = 24, Rbn_Col = 32;

Map = (char**)malloc(Rbn_Col * sizeof(char*));
for (int Cnt = 0; Cnt < Rbn_Col; Cnt++)
    *(Map + Cnt) = (char*)malloc(Rbn_Row * sizeof(char)); /* <--- line 5       */

Map[2][3]=99;
printf("%d\n", Map[2][3]);                                /* <--- works        */
printf("%d\n", *(Map+2*Rbn_Col+3));                       /* <--- doesn't work */
现在您可以连续访问:

Map = malloc(Rbn_Row * Rbn_Col * sizeof(char));

使用第一个malloc创建一个32指针的连续数组。在for中,为这些指针指定了一个新值,现在它们引用了另一个内存。所以,若你们取Map+3,你们并没有引用第一行第三列,但它引用了第三行

如果需要连续内存,还可以创建一个简单的一维数组:

const int Rbn_Row = 24, Rbn_Col = 32;

Map = (char**)malloc(Rbn_Col * sizeof(char*));
for (int Cnt = 0; Cnt < Rbn_Col; Cnt++)
    *(Map + Cnt) = (char*)malloc(Rbn_Row * sizeof(char)); /* <--- line 5       */

Map[2][3]=99;
printf("%d\n", Map[2][3]);                                /* <--- works        */
printf("%d\n", *(Map+2*Rbn_Col+3));                       /* <--- doesn't work */
现在您可以连续访问:

Map = malloc(Rbn_Row * Rbn_Col * sizeof(char));

使用第一个malloc创建一个32指针的连续数组。在for中,为这些指针指定了一个新值,现在它们引用了另一个内存。所以,若你们取Map+3,你们并没有引用第一行第三列,但它引用了第三行

如果需要连续内存,还可以创建一个简单的一维数组:

const int Rbn_Row = 24, Rbn_Col = 32;

Map = (char**)malloc(Rbn_Col * sizeof(char*));
for (int Cnt = 0; Cnt < Rbn_Col; Cnt++)
    *(Map + Cnt) = (char*)malloc(Rbn_Row * sizeof(char)); /* <--- line 5       */

Map[2][3]=99;
printf("%d\n", Map[2][3]);                                /* <--- works        */
printf("%d\n", *(Map+2*Rbn_Col+3));                       /* <--- doesn't work */
现在您可以连续访问:

Map = malloc(Rbn_Row * Rbn_Col * sizeof(char));

您错误地假设对
malloc
的32个调用返回连续内存。你怎么会这么想? 如果需要连续内存,则必须为数组分配一个
malloc

*(Map + row * Rbn_Col + column)

您错误地假设对
malloc
的32个调用返回连续内存。你怎么会这么想? 如果需要连续内存,则必须为数组分配一个
malloc

*(Map + row * Rbn_Col + column)

您错误地假设对
malloc
的32个调用返回连续内存。你怎么会这么想? 如果需要连续内存,则必须为数组分配一个
malloc

*(Map + row * Rbn_Col + column)

您错误地假设对
malloc
的32个调用返回连续内存。你怎么会这么想? 如果需要连续内存,则必须为数组分配一个
malloc

*(Map + row * Rbn_Col + column)

因为你的内存是不连续的,你只解引用了一次。不要类型转换malloc。这既不必要也不安全。是的,你可以把
sizeof(char*)
@Oli Charlesworth所以它应该是
*(*(Map+2)+3)
,对吗?这个问题没有多维数组,我只看到指针。是的,
*(*(Map+2)+3)
(按惯例写的
Map[2][3]
)是正确的。因为你的内存不连续,你只取消了一次引用,不要键入malloc。这既不必要也不安全。是的,你可以把
sizeof(char*)
@Oli Charlesworth所以它应该是
*(*(Map+2)+3)
,对吗?这个问题没有多维数组,我只看到指针。是的,
*(*(Map+2)+3)
(按惯例写的
Map[2][3]
)是正确的。因为你的内存不连续,你只取消了一次引用,不要键入malloc。这既不必要也不安全。是的,你可以把
sizeof(char*)
@Oli Charlesworth所以它应该是
*(*(Map+2)+3)
,对吗?这个问题没有多维数组,我只看到指针。是的,
*(*(Map+2)+3)
(按惯例写的
Map[2][3]
)是正确的。因为你的内存不连续,你只取消了一次引用,不要键入malloc。这既不必要也不安全。是的,你可以把
sizeof(char*)
@Oli Charlesworth所以它应该是
*(*(Map+2)+3)
,对吗?这个问题没有多维数组,我只看到指针。是的,
*(*(Map+2)+3)
(按照惯例编写的
Map[2][3]
)是正确的。