Classyyy 2022-05-15 22:10 采纳率: 40%
浏览 27
已结题

C语言中的,字符数组名和字符指针的区别


#include <stdio.h>                   //第一行
int main()                                //第二行
{                                               //第三行                            
    char* a = "I am a teacher.";  //第四行
    *a = 'v';                                //第五行
    char b[] = "I am a teacher."; //第六行
    char* p=b;                             //第七行
    *p = 'v';                                //第八行
    printf("%s\n", a);
    printf("%s\n", b);
    return 0;
}

第五行是错误的,因为字符指针变量a指向字符串常量"I am a teacher."的第一个字符,字符串常量是不能改变的。
但是第八行,同样写法是给字符指针变量赋值,为什么第五行错,而第八行却是对的呢?第八行和第五行的格式一样啊,左边都是字符指针变量a(第五行)和p第八行。

  • 写回答

3条回答 默认 最新

  • 开猿人 2022-05-15 22:21
    关注

    第五行错误的原因是变量a指向一个常量字符串,赋值a是更改常量字符串的内容,所以错误。
    第八行的b是在声明定义时,使用常量字符串初始化字符数组变量b,所以变量p指向的是b数组中的第一个元素,属于变量存储区域,所以赋值
    p是正确的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月15日

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题