在以下代码中,const
数组清除memset
数组的元素。
#include <stdio.h>
#include <string.h>
int main() {
const int a[3] = {1, 2, 3};
memset(a, 0, sizeof(a));
printf("%d %d %d\n",a[0],a[1],a[2]);
return 0;
}
在memset
数组上使用const
是否合法?
答案 0 :(得分:5)
否强>
请勿尝试修改声明为const
的数组的内容,否则结果为未定义的行为。
在该示例中,const int a[3];
的元素由memset
调用填充,生成警告,因为memset
函数将(非常量)指针指向void,编译器必须隐式抛弃const
。
C11 6.7.3类型限定符:
脚注132:
实施可能会将
const
对象放在volatile
中 只读存储区域。而且,实施不需要 如果从未使用过地址,则为此类对象分配存储空间。