标题:[原创]C的关键字——const的理解和用法
只看楼主
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
得分:0 

对不起,有个地方写错了 ==》
——int * const p = a;
// *p = 2; /*可以*/

// *(p+1) = 10;/*可以*/ --》这里应该是不可以,改正一下,指针不能移动

// p++; /*不可以*/


我的原则很简单:不做不喜欢的事!
2006-05-22 10:17
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
得分:0 

补充一点:(纯属个人经验)
虽然不能对指向常量的指针直接赋值:但可以通过scanf使其赋值。
例:
const int b=0;
int a;
const int *pt=&a;
*pt=3; //不可以

scanf ("%d",pt); //可以。 输出*pt==3,a==3。(pt的值为变量a的地址)

pt=&b; //pt可以再次指向一个常量或变量

pt=3; //不可以

scanf ("%d",pt); //可以。输出*pt==3,b==0。

注意:pt=&b后, pt的值虽为常量b的地址,但输出却是*pt==3,b==0


由于工作,N久都没来了!
2006-05-22 17:49
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
得分:0 

谢谢12楼的兄弟。但是最后一点错误,就这句:
注意:pt=&b后, pt的值虽为常量b的地址,但输出却是*pt==3,b==0
==》当你再输入一个数给pt,b也跟着改变;参考下面代码:
--------------
#include<stdio.h>

int main(void)
{
const int a = 2;
const int b=0;
const int *pt=&a;

printf("%d\n", *pt); //2
scanf ("%d",pt); // pt = 4;

printf("%d\n", *pt); // pt = 4;

pt = &b; // pt = 0;

scanf("%d", pt); // pt = 6;
printf("%d %d\n", *pt, b); // pt = 6, b = 6

system("pause");
return 0;
}


我的原则很简单:不做不喜欢的事!
2006-05-22 18:13
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
得分:0 

呵呵。我运行了下。
b的值没有改边。我认为也不可能改变。
也许是编译器的问题。我用的是LCC编译器。


由于工作,N久都没来了!
2006-05-22 18:23
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
得分:0 
我认为也没有改变,但是我在DEV-CPP和VC下运行结果都改变了。
这是啥回事?!

我的原则很简单:不做不喜欢的事!
2006-05-22 19:02
bob7789
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-4-10
得分:0 
再写点对于其它的心德吧,等待大作再次出现
2006-05-22 20:12
学C中
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2005-10-30
得分:0 

2006-05-24 08:06
hb1122
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-3-28
得分:0 
还不明白,先顶

偶很笨,但偶很好学,偶很菜,但偶很努力! 希望能得到好多好心的好人帮偶学习! 呵呵!!
2006-05-24 08:21
新的生命
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-2
得分:0 
以下是引用shuaiye在2006-5-22 17:49:00的发言:

补充一点:(纯属个人经验)
虽然不能对指向常量的指针直接赋值:但可以通过scanf使其赋值。
例:
const int b=0;
int a;
const int *pt=&a;
*pt=3; //不可以

scanf ("%d",pt); //可以。 输出*pt==3,a==3。(pt的值为变量a的地址)

pt=&b; //pt可以再次指向一个常量或变量

pt=3; //不可以

scanf ("%d",pt); //可以。输出*pt==3,b==0。

注意:pt=&b后, pt的值虽为常量b的地址,但输出却是*pt==3,b==0

为什么我通过调试之后*pt==3,而b==3
const没有起到任何作用呢,我用的win-tc


因为希望,生命才有了活力,因为梦想,所以要奋斗
2006-06-03 12:19
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-03 13:46



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




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

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