C语言入门 const使用的理解

开发 后端
希望通过本文对CONST的介绍,能给你带来帮助。本文适合初学者阅读,希望对你有帮助,一起来看。

我们都知道,const的用法是非常灵活的。对于新手来说,还是很棘手的。建议大家看看这两篇文章,可以结合本篇一起来看,《C++基础 详细介绍const的用法》和《C++初学者 const使用详解

 

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

const可以说一种常量的声明的关键字,如const int a=2;变量a就是一个常变量,a的值不能被改变,这个改变是一定意义上的不能改变.而是说值的改变不能直接通过a这个符号来改变.但事实上,a的值是可能改变的.如下例子:

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4. const int a=3;  
  5. int *p=(int*)&a;  
  6. *p=100;  
  7. printf("%d",a);  
  8. return 0;  

 

这样a的值就被改变了.

const也可以说一种只读的关键字,如

  1. int integerArray[10]={0};  
  2. const int* pointer=integerArray; 

 

这里pointer是指向一个常变量的指针变量.pointer指向可能改变,但它所指向的变量的值就不能直接通过pointer来改变.如:

  1. *(p+1)=2; 

 

这是不可以的.但如果有另外一个数组integerArray1,p=integerArray1是可以有.还有指向的变量不可改变,这种不可改变是一定意义的改变.如下例子:

  1. #include<stdio.h>  
  2. int main()  
  3. {   
  4. int array[10]={0};  
  5. const int *pointer=array;  
  6. int *pointer1=(int*)pointer;  
  7. pointer1[0]=1;  
  8. printf("%d",array[0]);  
  9. return 0;  

以上例子说明了,不能直接通过pointer改变array,但可能间接通过pointer来改变array;

现在说一说有const声明常指针,它的声明不像声明指向常量的指针形式.它的声明形式为:int* const pointer; .常指针在编程的过程中它的指向不能改变.因此,常指针在声明的时侯一定要给它赋初值.

否则,就不能直接给它赋值.但是,如果一定要给它赋上一定的值,是可以的.如下例子:

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4. int a=2;  
  5. intconst p;  
  6. int **p1=(int**)&p;  
  7. *p1=&a;  
  8. printf("%d",*p);  
  9. return 0;  

 

经过上面的介绍,相信大家对指向常量的常指针的声明也不难写出吧.它的声明形式:cont int* const p;它就不用作过多的介绍了,指向常量的常指针就是指向常量的指针与常指针的复合了.

责任编辑:于铁 来源: 互联网
相关推荐

2011-05-17 13:04:20

Cconst

2023-12-01 13:47:45

C语言conststat

2010-02-02 14:06:50

C++ const变量

2022-01-06 14:25:24

C语言指针内存

2023-09-26 22:37:16

C++const

2023-10-27 11:21:20

C语言Multics语言

2021-12-06 11:19:47

语言指针内存

2015-11-10 16:10:22

C语言StaticConst

2011-06-21 10:44:31

const

2010-01-13 17:04:36

C++语言

2010-01-26 10:27:43

C++语言

2009-09-02 17:10:45

C#语言入门

2011-07-20 10:06:54

CC++const

2024-03-11 15:32:50

C++开发

2023-09-22 09:41:28

LinuxC语言

2022-07-04 09:05:04

DruidSqlParserSQL

2021-09-07 05:02:50

C++ConstexprConst

2021-05-24 06:40:59

C语言Linux软件库

2010-01-18 16:27:26

C++语言

2021-11-11 15:12:21

C语言线程代码
点赞
收藏

51CTO技术栈公众号