标题:C语言指针
只看楼主
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
结帖率:76.92%
 问题点数:0 回复次数:9 
C语言指针
#include<stdio.h>
 
int main(void)
{
    char *ptr = "Linux";
    *ptr = 'T';
 
    printf("\n [%s] \n", ptr);
 
    return 0;
} 请问错哪里了?
搜索更多相关主题的帖子: Linux C语言 return include void 
2012-09-12 23:14
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
char *ptr = "Linux"; 这句的正确形式应该为 const char *ptr = "Linux"; 被""括起来的是字面字符串,每个字符都是不能被修改的,所以正确的类型应该是const char*,但是以前很多代码都用了char*这样的类型,为了向下兼容保留了这样的代码,所以呢,以后最好把接收字面字符串的指针改为const char*。

*ptr = 'T'; 修改了第一个字符,刚才说了这个字符串里的每个字符都是不能被修改的,所以编译没问题,运行出现错误,是不是提示内存不能为"write"?

My life is brilliant
2012-09-12 23:59
hrc2010a
Rank: 2
等 级:论坛游民
帖 子:16
专家分:55
注 册:2012-9-12
得分:0 
楼上的高手呀!!!
2012-09-13 00:24
逆天蚂蚁
Rank: 1
来 自:山西吕梁
等 级:新手上路
帖 子:22
专家分:4
注 册:2012-9-10
得分:0 
回复 2楼 lz1091914999
厉害
2012-09-13 10:53
Andony
Rank: 2
等 级:论坛游民
帖 子:38
专家分:60
注 册:2012-9-12
得分:0 
指针的实质是指向一个特定的内存地址的起始位置,“Linux”是字符串常量,存储在静态数据区,其内容是不能被修改的,指针ptr只是指向Linux存储位置的起始地址,并不能通过指针来修改字符串常量。
你可以好好去看下有关 存储位置 方面的东西。

重复的事情用心做,你就是赢家
2012-09-13 13:26
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
得分:0 
回复 2楼 lz1091914999
const这个是干嘛用的啊?
我还问一下是不是所有的常量比如整形常量 123 字符串常量都是存储在静态存储区呢?

[ 本帖最后由 陆嘉文 于 2012-9-14 19:43 编辑 ]
2012-09-14 19:41
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
得分:0 
回复 2楼 lz1091914999
我加const 会报错啊!
Compiling...
hhh.cpp
F:\C文件\hhh.cpp(6) : error C2166: l-value specifies const object
执行 cl.exe 时出错.

hhh.obj - 1 error(s), 0 warning(s)
这是报错的文字
2012-09-14 19:46
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 6楼 陆嘉文
凡是你自己写的一些字面值都是常量,都与程序代码一起存储在可执行文件中,运行时和代码一起加载到内存。

My life is brilliant
2012-09-14 19:58
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 7楼 陆嘉文
l-value specifies const object

当然会错啦,你的那行代码不是修改了不应该修改的东西么?

My life is brilliant
2012-09-14 19:59
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
得分:0 
[ ]
2012-09-15 00:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381289-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.073917 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved