我知道我可以在 C 中定义数组类型,如下所示:
typedef int array_t[123];
然而,这并没有做出声明
void someFunction(array_t myArray)
在某种意义上是恒定的
myArray=0;
在函数内部是被禁止的,但是
myArray[0]=0;
被允许。
有没有办法做到这一点?如果我在类型定义或参数声明中添加“const”,我最终会得到相反的行为,其中数组元素是常量,但数组指针本身是可变的。
C99 确实引入了通过“数组”语法声明常量指针参数的语法
void foo(int a[const 123]) /* same as `int *const a` */
{
a = NULL; // ERROR
}
正如你在上面的例子中看到的,const
必须放在[]
.
但是,const
不能通过使用数组类型的typedef
声明“提前”将其嵌入到数组类型中。只能在函数参数列表中直接使用。
如果你绝对需要一个typedef
,使用 struct 来封装它。在数组上使用typedef
不是一个好主意。
typedef struct {
int arr[123];
} array_t;
然后你可以按照 Joachim Pileborg 的建议做const
:
void someFunction(array_t * const myArray)
{
myArray->arr[0] = ...
这种方法的另一个优点是您还可以使用您的对象传输其他数据。