Str
中Str[3][5]
是“指针”还是“指针指针”?
我通常声明char **Str
来制作模拟的2D数组,但是如何将Str[3][5]
的地址发送到另一个函数,以及如何设置该函数的参数以修改{中的值{1}}?
据我所知,编译器将2D数组视为普通数组,因此我应该将Str[3][5]
(指针)发送给另一个函数。但是如何通过收到的指针修改Str
的值?
答案 0 :(得分:5)
在大多数表达式中使用的T数组将衰减为类型&#34的指针;指向T"并使其值等于数组第一个元素的地址。
如果Str
被声明为:
char Str[3][5];
然后Str
会衰减到char (*)[5]
,并且值为&Str[0]
。如果传递给函数,您可以按如下方式声明函数:
void foo (char (*str)[5], size_t n);
在foo()
内,您可以像访问str
一样访问Str
。
答案 1 :(得分:0)
Pointer address in a C multidimensional array
要扩展这个类似问题的答案,当我们输入以获取数组的地址时。数组的名称实际上是指向数组中第一个变量的指针。
您无法真正传递数组特定部分的指针,因为我们在编码中与之交互的是指针本身。 (array + 1) == array[1]
我们假设我们已经创建了一个数组指针int* arrayPointer;
,并且您希望获得数组中的第二个变量。您可以指定arrayPointer = array + 1
或arrayPointer = &array[1]
因此,如果你想修改数组[3] [5]的一部分,最简单的方法是选择数组的那一部分并为其分配一个变量。例如,如果你想修改第一个"列"第一个" row"你会输入......
array[0][0] = variable
希望这有帮助。