在 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;
}
如何在 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;
}