如何在C中定义动态只读整数数组?
我知道我们可以使用限定符来分配静态只读数组,' const'并且'静态'但是在动态数组的情况下如何做同样的事情呢?
答案 0 :(得分:3)
您可以使用const
限定符指向已创建的非const
数组:
#include <stdio.h>
#include <stdlib.h>
int *alloc(int n)
{
int *arr = malloc(n * sizeof(*arr));
for (int i = 0; i < n; i++) {
arr[i] = i;
}
return arr;
}
int main(void)
{
const int *arr = alloc(5);
arr[3] = 5; /* error */
return 0;
}
答案 1 :(得分:2)
定义动态分配的内存没有任何标准方法const
。由于您不能将calloc
以外的动态分配内存初始化用于初始化为零,因此没有多大意义。 C根本没有任何标准库函数用于将内存初始化为其他任何内容。它要求您使用赋值,而const
永远不会使用赋值。
您可以将指向动态分配的内存的指针声明为const
,但是如果您这样做,则允许用户(就语言标准而言)抛弃const
并修改数据无论如何。
理论上可能不够好,但在实践中却是如此。抛弃const
来修改数据的代码,特别是以调用者不清楚的方式,是非常罕见的。