在 C 中定义一个动态的只读数组

Defining a dynamic, read-only array in C

如何在 C 中定义动态只读整数数组?

我知道我们可以使用限定符 'const' 和 'static' 来分配静态只读数组。但是如何在动态数组的情况下做同样的事情呢?

没有任何标准方法可以定义 动态分配内存为const。没有多大意义,因为除了 calloc 之外,您不能对动态分配的内存使用初始化将其初始化为零。 C 根本没有任何标准库函数来将内存初始化为其他任何东西。它要求您改用赋值,这永远不会与 const.

一起使用

您可以将指向动态分配内存的指针声明为 const,但如果您这样做,则允许用户(就语言标准而言)丢弃 const 和无论如何修改数据。

理论上这可能不够好,但实际上是这样。放弃 const 来修改数据的代码非常少见,尤其是调用者不清楚的方式。

您可以使用 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;
}