Str是Str [Col] [Row]中的“指针”还是“指向指针”?

时间:2014-06-25 02:26:26

标签: c arrays pointers

StrStr[3][5]是“指针”还是“指针指针”?

我通常声明char **Str来制作模拟的2D数组,但是如何将Str[3][5]的地址发送到另一个函数,以及如何设置该函数的参数以修改{中的值{1}}?

据我所知,编译器将2D数组视为普通数组,因此我应该将Str[3][5](指针)发送给另一个函数。但是如何通过收到的指针修改Str的值?

2 个答案:

答案 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 + 1arrayPointer = &array[1]

因此,如果你想修改数组[3] [5]的一部分,最简单的方法是选择数组的那一部分并为其分配一个变量。例如,如果你想修改第一个"列"第一个" row"你会输入......

array[0][0] = variable

希望这有帮助。