C指针输出,而不是我预期的那个

时间:2016-07-30 06:27:38

标签: c pointers

有人可以帮我理解这种行为吗?

我有一个这样的片段

#include <stdio.h>
int main()
{
    char *ptr = "Hello";
    printf("%c ",++*ptr);
    return 0;
}

我期望(记住++和*和R到L关联性的优先顺序)输出应该是

I    (the letter I)

但事实并非如此,而是程序崩溃了。

所以请有人解释一下,我在这里缺少什么?

2 个答案:

答案 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中的地址,我们需要先增加它,然后取消引用该指针以获取存储在该值的数据。