如何在C中定义数组类型并使其成为const指针(不是指向const的指针)

LPG*_*LPG 0 c arrays typedef c99

我知道我可以在C中定义数组类型,如下所示:

typedef int array_t[123];
Run Code Online (Sandbox Code Playgroud)

然而,这并没有作出声明

void someFunction(array_t myArray)
Run Code Online (Sandbox Code Playgroud)

在这个意义上是恒定的

myArray=0;
Run Code Online (Sandbox Code Playgroud)

在函数内被禁止,但是

myArray[0]=0;
Run Code Online (Sandbox Code Playgroud)

被允许.

有没有办法实现这个目标?如果我在类型定义或参数声明中添加"const",我最终会得到反向行为,其中数组元素是常量,但数组指针本身是可变的.

Som*_*ude 5

无论如何,你永远不能分配给数组变量.当数组衰减到指针时,只要它没有衰减,它就没有指针,所以你无法分配它.

如果要将所有数组设置为特定值,请使用memset,或者如果要复制另一个数组,请使用memcpy.


编辑后.这里要记住的重要一点是,如果将它作为参数传递,那么它将作为指针而不是数组传递.

你可以做的是将参数声明为常量指针而不是指向常量的指针.

喜欢

void someFunction(int * const myArray);
Run Code Online (Sandbox Code Playgroud)

然后你仍然可以修改元素,但你不能改变实际的指针.