[英]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.