DFSstar 2023-11-30 10:57 采纳率: 85.7%
浏览 1
已结题

学C中不懂就问,字符串指针

int main(){
    char *str = "stuff";
    
    printf("%p\n", str);
    printf("%c", *str+1);
    return 0;
}

这段代码我能理解的是,char是字符类型,代表单个字符,*str指向字符串数组的第一个字符's',所以是能理解,就像直接给int指针赋值一个int数组。
我不能理解的是,int *p = 1;是不行的,因为1是一个数值,不是地址。
但是下面这个char *str = "stuff";为什么可以啊,为什么啊。
如果写成下面这个我是能理解,为什么上面这个能成立啊T.T,这给"stuff"这个字符串分配内存了吗?

int main(){
    char s[ ] = "stuff";
    char *str = NULL;
    str = s; 

    printf("%p\n", str);
    printf("%c", *str+1);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2023-11-30 10:59
    关注

    char *str = "stuff";
    这个编译器会自动将这个字符串放在常量区,并且让str指向这个常量区字符串的指针。
    注意 char s[ ] = "stuff";和 char *str = "stuff"; 是不同的,前者是定义字符数组,然后依次用字符串的每个字符填充(结尾加上\0)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月30日
  • 已采纳回答 11月30日
  • 创建了问题 11月30日