指针不是只能保存地址吗,char *ptr = "hello world";这行不报错有点不理解

指针不是只能保存地址吗,char *ptr = "hello world";这行不报错有点不理解

11.  单选题


关于下面程序的说法,正确的是:
char *getString(void){
    char *ptr = "hello world";
    printf("%s\n", ptr);
    return ptr;
}
int main(){
    char *p = getString();
    char *q = “heihei”;
    memcpy(p, "hahahaha", 8);
    printf("%s, %s\n", p, q);
}


参考解析:

函数getString返回常量字符串的地址,因为常量字符串在常量区不可更改,所以程序会触发段错误崩溃

https://img1.sycdn.imooc.com/climg/3a97616909c228ad19141324.jpg

指针不是只能保存地址吗,char *ptr = "hello world";这行不报错有点不理解


正在回答

登陆购买课程后可参与讨论,去登陆

1回答
这行代码的意思是定义指针变量,并对它初始化,正常来说,因为指针变量只能存放地址,所以这里赋值字符串是不行的,但是编译器会把字符串存放在变量区,把字符串存放在常量区的地址存放到指针变量中。由于常量区不可以更改,所以在使用的时候,*p='x'会导致程序产生段错误!
  • 慕哥8499003 提问者 #1

    可以理解成char *ptr存的是,"hello world"这个字符数组的地址吗

    1天前
  • 中年猿叔 回复 提问者 慕哥8499003 #2

    可以的,指针变量存放的是字符串首地址

    9小时前
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师