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日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用