[英]How to define array type in C and making it a const pointer (not pointer to const)
我知道我可以在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
放在[]
。
但是,不能通过对数组类型使用typedef
声明将该const
提前嵌入到数组类型中。 它只能直接在功能参数列表中使用。
如果您绝对需要typedef
,请使用struct对其进行封装。 在数组上使用typedef
不是一个好主意。
typedef struct {
int arr[123];
} array_t;
然后您可以使用const
来执行Joachim Pileborg的建议:
void someFunction(array_t * const myArray)
{
myArray->arr[0] = ...
这种方法的另一个优点是,您还可以与对象一起传输其他数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.