DFSstar 2023-11-30 10:57 采纳率: 75%
浏览 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日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3