原问题:
如果我定义:
const int z[5] = {10, 11, 12, 13, 14};
它的意思是:
- 它是一个整数常量数组,即 z 指向的地址始终不变,但 z 的元素可以改变。
或者
- z 的每个元素都是一个常量,即它们的值永远不会改变。
编辑:
更多信息:
还有另一个变量:
const int *y = z;
func((int *) y);
其中 func 的定义如下:
void func(int y[]) {
int i;
for(i = 0; i < 5; i++) {
y[i] = i; //y[i] can be set to any integer; used i as example
}
}
在 func 中使用 y 遍历数组并更改每个元素。即使 z 的所有元素都是 const,这是否有效?
z[0]
吗? - Amitz
指向的地址无论如何都不会改变。无论如何,您可以使用http://cdecl.org/。 - juanchopanzaz[0]
的尝试都应该被编译器拒绝。请更新您的问题,并提供一个完整的自包含示例来证明这一点。 - Keith Thompsony
的值强制转换为int*
。你告诉编译器 假装y
指向非const
数据。实际上,y
指向const
数据,你向编译器撒了谎,你的代码行为未定义。强制类型转换,特别是指针类型转换,通常应该避免使用。 - Keith Thompson