鱼C论坛

 找回密码
 立即注册
查看: 2463|回复: 5

Const的2种情况?。。 求指教啊, 求求。。

[复制链接]
发表于 2011-12-11 16:37:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zjxy2545 于 2011-12-11 18:31 编辑

{
    const char *str = "abcdefg\n";

//const是常量标识符, 小甲鱼视频讲const就是使一个
//变量常量化, 是不可改变的。但是,请看下面

str = "bianbianbian";

printf("%s\n", str);
//竟然可以打印出来无错误,  想不明白啊。求指教
}

情况2
{
char * const str = "abcdefg\n";

//常量指针是一个固定的指针,不可改变它的值,但它所指的数据可以改变。
//这里我可以理解为不能改变STR的地址,但是可以改变str地址上的内容吗

str[0] = 'w';  //这个是合法的?

str = "bianbianbian"; //非法的?  这也太绕了吧?

printf("%s\n", str);
//情况2打印出来为内存不能写, 因为常量存储区的问题。。
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-11 17:05:44 | 显示全部楼层
常量标识符啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-11 18:50:35 | 显示全部楼层
孙鑫的课程里有一节讲到。

常量指针   是一个指向常量的指计,即所指的对象是常量,但本身是个指针,想改就改,就像你的第一种情况。

指针常量   是一个指针类型的常量, 则这个指针本身不能被修改。

没做过具体应用,所以了解不深。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-11 19:05:23 | 显示全部楼层

谢谢你了,  但是我还是不明白你在说什么。。  不过非常感谢你。。


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-11 19:27:01 | 显示全部楼层
const char *str
const是修饰char的,意思就是说str可以指向不同的东西如:
str = "abc";
str = "dfg";
但不能通过str修改它指向的东西:如以下都是非法的:
*str = 'c';
*(str+2)='k';
str[3]='v';

char *const str=... ;
const是修饰*的(就是修饰指针本身),意思就是说str不可以指向不同的东西,但可以通过str修改它所指的东西,如以下都是合法的:
*str = 'c';
*(str+2)='k';
str[3]='v';
而以下的都是非法的;
str = "abc";
str = "dfg";
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-11 20:22:29 | 显示全部楼层
const char *str = "abcdefg\n";//首先str是一个指针,它是一个人指向const char型变量的指针,也就是说此变量是只可读不可改的变量
char * const str = "abcdefg\n";//首先str是一个指针,它是一个人指向char型变量的指针,但此指针const str是只能读不能写的。也就是说此指针的内容不可改。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-9 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表