猿问

为什么不能用双指针来表示二维数组呢?

为什么不能用双指针来表示二维数组呢?

为什么不能用双指针来表示二维数组呢?

arr[2][5] = {"hello","hai"};**ptr = arr;

在这里,为什么双指针(*PTR)不能在这个示例中工作?


富国沪深
浏览 833回答 3
3回答

白衣非少年

我要试着画出int&nbsp;array[10][6];和int&nbsp;**array2&nbsp;=&nbsp;malloc(10&nbsp;*&nbsp;sizeof&nbsp;*array2);for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;++i) &nbsp;&nbsp;&nbsp;&nbsp;array2[i]&nbsp;=&nbsp;malloc(6&nbsp;*&nbsp;sizeof&nbsp;**array2);就像在记忆中,它们是如何不同的(而且它们不能相互转换)array看起来:&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;..............|&nbsp;|&nbsp;|&nbsp;(10*6&nbsp;elements&nbsp;of&nbsp;type&nbsp;int) &nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-<&nbsp;first&nbsp;row&nbsp;><&nbsp;second&nbsp;row>&nbsp;...array2看起来:&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp; |&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;(10&nbsp;elements&nbsp;of&nbsp;type&nbsp;int&nbsp;*) &nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp; &nbsp;|&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;|&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\-->|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;(6&nbsp;elements&nbsp;of&nbsp;type&nbsp;int) &nbsp;|&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;- &nbsp;|&nbsp;| &nbsp;|&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;|&nbsp;&nbsp;\&nbsp;-->|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;(6&nbsp;elements&nbsp;of&nbsp;type&nbsp;int) &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;- &nbsp;| &nbsp;| &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_&nbsp;_ &nbsp;&nbsp;\&nbsp;-->|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;(6&nbsp;elements&nbsp;of&nbsp;type&nbsp;int) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-当你说array[x][y],翻译成*((int *)array+x*6+y)但是,当你说array2[x][y],翻译成*(*(array2+x)+y)(请注意,为array,这个公式也有效(读到帖子的末尾,然后是注释)。也就是说,静态2d数组实际上是一行放在一起的一维数组。该指数由公式计算。row * number_of_columns_in_one_row + column.然而,一个动态的2d数组只是一个一维指针数组。然后动态分配每个指针指向另一个一维数组。事实上,那个指针可以是任何东西。可能是NULL,或者指向单个变量,或者指向另一个数组。每个指针都是单独设置的,因此它们可以有不同的性质。如果需要传递array在某个地方,你不能把它投到int **(想象一下会发生什么。这个int的单元格值array被解释为指针和取消引用->Bam!分割错误!)然而,你可以想到array的一维数组int [6]这是一个元素的一维数组,具有int [6]..写下来,你说int&nbsp;(*p)[6]&nbsp;=&nbsp;array;

开心每一天1111

拥有指针对指针意味着每一行(或列,如果您喜欢这样想)可以有一个不同的长度与其他行/列。还可以仅通过指向Start元素的指针和一个整数来表示2D数组,该整数指定每行/列的元素数:void&nbsp;matrix_set(double&nbsp;*first,&nbsp;size_t&nbsp;row_size,&nbsp;size_t&nbsp;x,&nbsp;size_t&nbsp;y,&nbsp;double&nbsp;value){ &nbsp;&nbsp;first[y&nbsp;*&nbsp;row_size&nbsp;+&nbsp;x]&nbsp;=&nbsp;value;}
随时随地看视频慕课网APP
我要回答