| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5989 人关注过本帖, 4 人收藏
标题:[原创]对const使用的理解.
取消只看楼主 加入收藏
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
结帖率:100%
收藏(4)
 问题点数:0 回复次数:5 
[原创]对const使用的理解.

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: neverTheSame E-mail:zhaoxufeng9997@126.com QQ:475818502
*/ 时间: 2007-11-16 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


const对很多人来说既陌生又熟悉.可以说很棘手的问题,
有些地方很难理解.我在刚学C的时侯,对它的理解也是很模糊的.
好像有点理解,但又说不出个所以然来.
在此,就向大家分享,我一直以来对它的理解,如有不当之处请指教.

const可以说一种常量的声明的关键字,如const int a=2;变量a就是一个常变量,
a的值不能被改变,这个改变是一定意义上的不能改变.而是说值的改变不能直接通过a这个符号
来改变.但事实上,a的值是可能改变的.如下例子:
#include<stdio.h>
int main()
{
const int a=3;
int *p=(int*)&a;
*p=100;
printf("%d",a);
return 0;
}
这样a的值就被改变了.
const也可以说一种只读的关键字,如int integerArray[10]={0};const int* pointer=integerArray;
这里pointer是指向一个常变量的指针变量.pointer指向可能改变,但它所指向的变量的值就不能直接通过pointer来改变.
如:*(p+1)=2;这是不可以的.但如果有另外一个数组integerArray1,p=integerArray1是可以有.
还有指向的变量不可改变,这种不可改变是一定意义的改变.
如下例子:
#include<stdio.h>
int main()
{
int array[10]={0};
const int *pointer=array;
int *pointer1=(int*)pointer;
pointer1[0]=1;
printf("%d",array[0]);
return 0;
}
以上例子说明了,不能直接通过pointer改变array,但可能间接通过pointer来改变array;
现在说一说有const声明常指针,它的声明不像声明指向常量的指针形式.
它的声明形式为:int* const pointer; .常指针在编程的过程中它的指向不能改变.
因此,常指针在声明的时侯一定要给它赋初值.否则,就不能直接给它赋值.
但是,如果一定要给它赋上一定的值,是可以的.如下例子:
#include<stdio.h>
int main()
{
int a=2;
int* const p;
int **p1=(int**)&p;
*p1=&a;
printf("%d",*p);
return 0;
}
经过上面的介绍,相信大家对指向常量的常指针的声明也不难写出吧.它的声明形式:
cont int* const p;它就不用作过多的介绍了,指向常量的常指针就是指向常量的指针与
常指针的复合了.
好了就说到这里吧.

搜索更多相关主题的帖子: const 
2007-11-16 23:43
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

变量似乎不可以用来作数组的大小的声明吧.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-18 10:26
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
回复:(雨中飞燕)[quote]但事实上,a的值是可能改变的...

我在Red Hat Linux 9.0的版本上试了一下.
完全可以.

图片附件: 游客没有浏览图片的权限,请 登录注册


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-18 18:34
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
我在TC2.0下运行可以.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-18 18:47
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
回复:(雨中飞燕)楼上在12楼发的图片表明了什么?我...
这个图片能不能说明问题?...
图片附件: 游客没有浏览图片的权限,请 登录注册


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-19 13:53
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
回复 21# 的帖子
要知道,程序不是为了编译器而编写的.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-11-23 12:45
快速回复:[原创]对const使用的理解.
数据加载中...
 
   



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

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