原帖及讨论:http://bbs.bccn.net/thread-186615-1-1.html */ -------------------------------------------------------------------------------------- */ 出自: 编程中国 http://www.bccn.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;它就不用作过多的介绍了,指向常量的常指针就是指向常量的指针与 常指针的复合了. 好了就说到这里吧. |