有人可以帮我理解这种行为吗?
我有一个这样的片段
#include <stdio.h>
int main()
{
char *ptr = "Hello";
printf("%c ",++*ptr);
return 0;
}
我期望(记住++和*和R到L关联性的优先顺序)输出应该是
I (the letter I)
但事实并非如此,而是程序崩溃了。
所以请有人解释一下,我在这里缺少什么?
答案 0 :(得分:1)
char * ptr =“你好”;
ptr是字符串文字,你不应该改变它。
如果要更改,请改用数组:
char ptr[] = "Hello";
printf("%c ",++*ptr);
请注意,在原始代码char *ptr = "Hello";
中,ptr
不是const指针,它可以更改为指向其他内容。
因为"Hello"
字符串存储在只读内存中,所以只要ptr
指向它,就无法修改ptr
指向的数据。
但是,通常情况下,您可以将ptr
更改为指向其他位置,并且可以修改其指向的数据,例如
char *ptr = "Hello"; // data cannot be modified by ptr
char arr[] = "abcd";
ptr = arr; // data can be modified by ptr
printf("%c ",++*ptr);
答案 1 :(得分:-1)
您的代码几乎没问题,但需要稍加修改,
#include <stdio.h>
int main()
{
char *ptr = "Hello";
printf("%c ",*(++ptr));
return 0;
}
说明: 这种情况正在发生,因为根据您的代码(++*ptr)
,它会增加ptr
指向的地址的值,而不是ptr本身。但是为了增加存储在ptr
中的地址,我们需要先增加它,然后取消引用该指针以获取存储在该值的数据。