【发布时间】:2015-11-02 16:10:58
【问题描述】:
我尝试使用change() 函数来更改y 的内容。
我想问为什么在将x分配给"abc"时删除*时y不能改变?
另外,我发现&*x和&y是一样的,那是否意味着x指针的地址被赋值为和*y指向的内容地址一样?还有,为什么&x不等于"abc"?
我的代码:
void change(char *x) {
*x = "abc";
printf("S3: %x\n", &x);
printf("S4: %x\n", &*x);
}
int main() {
char *y = "def";
printf("S1: %x\n", &y);
printf("S2: %x\n", &*y);
change(&y);
printf("result: %s\n", y);
return 0;
}
【问题讨论】:
-
你不能合法地改变
y的“内容”,因为它指向一个字符串字面量。 -
*x="abc"???-Wall它。 -
为什么编译时禁用警告?
-
@Jason 它们不是指针,它们是 C++ 中
const char[]和 C 中char[]类型的 数组(即使修改它们是 UB)。 -
这段代码不能用 C 或 C++ 编译。请确定您使用的语言,使代码以该语言编译,并删除其他语言的标记。
标签: c pointers pass-by-reference