问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言对const使用该如何理解?

发布网友 发布时间:2022-04-25 19:53

我来回答

5个回答

热心网友 时间:2022-06-16 22:53

CONST
C中CONST的使用:
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。

问题:const变量 & 常量

为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?

const int n = 5;
int a[n];

答案与分析:

1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为程序中根本没有地方存放它的值,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。

2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定*了它。

3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。

问题:const变量 & const 限定的内容

下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?

typedef char * pStr;
char string[4] = "abc";
const char *p1 = string;
const pStr p2 = string;
p1++;
p2++;

答案与分析:

问题出在p2++上。

1)、const使用的基本形式: const char m;

限定m不可变。

2)、替换1式中的m, const char *pm;

限定*pm不可变,当然pm是可变的,因此问题中p1++是对的。

3)、替换1式char, const newType m;

限定m不可变,问题中的charptr就是一种新类型,因此问题中p2不可变,p2++是错误的。

问题:const变量 & 字符串常量

请问下面的代码有什么问题?

char *p = "i'm hungry!";
p[0]= 'I';

答案与分析:

上面的代码可能会造成内存的非法写操作。分析如下, “i'm hungry”实质上是字符串常量,而常量往往被编译器放在只读的内存区,不可写。p初始指向这个只读的内存区,而p[0] = 'I'则企图去写这个地方,编译器当然不会答应。

问题:const变量 & 字符串常量2

请问char a[3] = "abc" 合法吗?使用它有什么隐患?

答案与分析:

在标准C中这是合法的,但是它的生存环境非常狭小;它定义一个大小为3的数组,初始化为“abc”,,注意,它没有通常的字符串终止符'\0',因此这个数组只是看起来像C语言中的字符串,实质上却不是,因此所有对字符串进行处理的函数,比如strcpy、printf等,都不能够被使用在这个假字符串上。

问题5:const & 指针

类型声明中const用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const限定不可变的内容是什么?

1)、const在前面

const int nValue; //nValue是const
const char *pContent; //*pContent是const, pContent可变
const (char *) pContent;//pContent是const,*pContent可变
char* const pContent; //pContent是const,*pContent可变
const char* const pContent; //pContent和*pContent都是const

2)、const在后面,与上面的声明对等

int const nValue; // nValue是const
char const * pContent;// *pContent是const, pContent可变
(char *) const pContent;//pContent是const,*pContent可变
char* const pContent;// pContent是const,*pContent可变
char const* const pContent;// pContent和*pContent都是const

答案与分析:

const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,特别是在看别人代码的时候,常常会因为这样而不好判断作者的意图,下面讲一下我的判断原则:

沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。你可以根据这个规则来看上面声明的实际意义,相信定会一目了然。

另外,需要注意:对于const (char *) ; 因为char *是一个整体,相当于一个类型(如 char),因此,这是限定指针是const。

热心网友 时间:2022-06-16 22:53

首先你要明白const的形式:
int b = 500;
const int* a = &b; [1]
int const *a = &b;[2]
int* const a = &b;[3]
const int* const a = &b;[4]
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对内容进行更改操作,如不能*a = 3 ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;[4]为指针本身和指向的内容均为常量。

那么我们就有这样的思考:
[思考1]: 以下的这种赋值方法正确吗?
const A* c=new A();
A* e = c;
这种方法不正确,因为声明指针的目的是为了对其指向的内容进行改变,而声明的指针e指向的是一个常量,所以不正确;

[思考2]: 以下的这种赋值方法正确吗?
A* const c = new A();
A* b = c;
这种方法正确,因为声明指针所指向的内容可变;

你上面const是声明变量的,所以不能改变他的值的,但是如果按思考2 的方法const只声明指针的是可以改变变量内容的

热心网友 时间:2022-06-16 22:54

const int *pointer=array;
这里的 pointer是常量指针 它指向固定的的内存单元,并且不能指向别的内存单元 但可以改变内存里的值 可以通过*运算符 比如*(pointer)=1 即给数组的第一个元素赋值为1;
而用你的方法,int *pointer1=(int*)pointer; 其实是把 const * int 类型的 指针强行转换成了int*,所以pointer1即是int*类型的了 所以可以通过指针访问,但这种做法不好 不安全。
你所说的 int* const pointer; 最好写成int const *pointer; 他是声明一个指向常量的指针,也就是说,指针指向的内存单元可以改变 但里面的值不能改变,这也就是要在声明处赋值的道理。如果一定要赋值
那可以这样
#include<iostream.h>
main()
{
int a;
a=3;
int const *p=&a;
a=2;
cout<<*p<<endl;
}

你可以修改a的值 当a修改的同时 改变了 p指向的内存里的值 ,但却不可以用*p来修改,

热心网友 时间:2022-06-16 22:54

很简单`就是cont int* const p,哪有那么多废话..

热心网友 时间:2022-06-16 22:55

找老师吧,一对一教学方便,而且不懂还可以问
c语言中const是什么意思。。。

C语言中,const表示常量。1. const的基本含义 在C语言中,const关键字用于声明一个变量为常量,这意味着一旦该变量被赋值后,其值就不能被修改。这对于那些不希望在程序执行过程中改变其值的变量非常有用。通过使用const关键字,可以提高代码的可读性和可维护性,因为程序员知道这些变量是不可更改的,从...

c语言const是什么意思

在C语言中,const是一个关键字,表示常量的意思。本质上,const是用于限制一个变量的值不可更改的。在定义变量时,可以使用const关键字将其定义为常量,一旦定义完成之后,便无法修改其值。这种做法可以避免因意外错误而修改了变量的值,从而导致程序出现不可预期的结果。const这个关键字在C语言中起到的作...

C语言中const的用法详解

C语言中const的深入理解const在编程中代表常量,用于限制变量的值不可更改,它具有静态作用域,最初是为替换预编译指令而设计。与define有明显区别,const的使用方式更为灵活。当const修饰局部变量时,如`const int num = 10;`,确保变量值固定,必须在声明时初始化。特别地,对于常量字符串,如`const ...

const是什么

在C语言中,const是一个重要的关键字,用于声明常量。它将变量或对象的值固定为程序执行期间不可更改的状态,就像数学中的常数一样。当我们使用const修饰变量时,例如`const int a=1`,它意味着无论在程序何处,a的值都不能被修改。对于指针,尽管const仍会影响其指向的内容,但不会改变指针本身的地...

c语言中const 是什么意思,怎么用,什么时候用?

const 表示常量,相当于宏定义,只能读取,不能修改。常变量:const 数据类型 符号常变量 = 数值 如:const float PI=3.14;指针常量:数据类型 *const 指针变量=变量名 如:char *const p="abc";const修饰的是指针变量,而不是指针的值,所以指针指向的值是可以修改的。常指针:const 数据类型 *...

const是什么意思?怎么用啊?

const 基本词义 n. 常数;常量;结构;构造;康铜;铜镍合金;建筑;建筑物 在C语言中 const修饰符可以把对象转变成常数对象,什么意思呢?意思就就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!使用方法是:const int a=1;//这里定义了一个int类型的const常数...

const在c语言中的用法

该语言主要用途是定义常量,即不可修改的变量。const可以用来定义常量,即在程序运行期间其值不能改变的变量。例如,const int MAX_VALUE =100; 定义了一个名为MAX_VALUE的常量,其值为100,且这个值在程序运行期间不能被改变。const也可以与指针一起使用,以防止指针指向的值被修改。在函数参数中使用...

c语言中const 是什么意思?

还提高了程序的执行效率,因为编译器会直接使用const常量的存储值,无需额外的内存操作。总之,const在C语言中不仅是限制变量可变性的工具,还通过优化内存使用和提升程序效率,为编写更可靠、高效的代码提供了支持。理解const的使用对于编程实践和代码审查都大有裨益,它在其他编程语言中也得到了广泛应用。

const是什么意思

用const修饰引用,使应用不可修改,但这并不耽误引用反映任何对变量的修改。Const加在数据类型前后均可。c语言程序设计的基础内容:《C语言程序设计》是软件工程专业学生必修的专业基础课程,是后续C++语言程序设计、数据结构、操作系统等课程的先修课程。C语言是一门面向过程的计算机编程语言。C语言的设计...

c语言中const 是什么意思,怎么用,什么时候用?

以这个为例const int i=100;这表示i的值不能被改变,也就是常变量,如果你在程序中再给i赋值,比如i=200;这就会报错。也可用在函数上,格式:int sort(int ,int) const{} 用处:让不想改变的变量不被无意或有意的改变。。。

C语言const的用法详解 c语言const int 对c语言的理解和收获 c语言const指针 C语言中static C语言中struct C语言中的理解 怎么理解c语言 怎么理解c语言的函数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
四川成人大学自考专业有哪些 世界辶窗门票多少 成人大学自考有哪些专业比较好 感觉不到情感是怎么回事儿 车八岭原生态漂流谷地址在哪里? 郭德纲于谦开的公司都有哪些 成人大学自考能学什么专业 车八岭国家级自然保护区旅游资源 木雕如何处理 民间中医专长医师资格证怎么报名 c语言里const int 和int 有什么区别,const的作用是什么。 c语言中const 是什么意思,怎么用,什么时候用? c语言中const是什么?有什么用途?求解答,谢谢,急! 怎么样才能让胡子不长那么快? 怎么脱胡子,让胡子不再长 怎样让胡子少长或不长 怎么才能不长胡子? 如何把上百的数快速开方???每次要算好久 怎样才能把皮肤变百 怎样把一百块钱变成两百块钱,再两百变四百,变到一千可以了。 怎样把几百个文件夹中的文件全部移动到另一个文件夹里? 怎样将百.度热议删掉除? 如何把百设罝为我的主页 怎样把百渡设置为首页 word 中怎样才能把“百任意字符度”改称“百度” 鞠躬尽瘁什么意思? 鞠躬尽瘁死而后已 故事情节 鞠躬尽瘁有什么含义 鞠躬尽瘁死而后已体现了什么? “鞠躬尽瘁,死而后已”是什么意思? C++中const什么意思? 计算机C语言中的关键字:const是什么意思? c语言中const、static关键字的用法? C语言CONST和DEFINE怎么用? C语言, const 这个怎么用啊?怎么好像我用了不起作用的? c语言中,const常量怎么用?const a=3.1415926;可以吗? c语言中const的用法 const在C语言中有哪些用法? 怎么从从微软原版windows10 iso镜像中获取winre.wim映像 用手机在微软官网上下载的win10ISO能用吗? 微软官方win10iso怎么安装 微软win10官方原版iso镜像怎么用 微软官方那个Windows 10 光盘映像(ISO 文件不用钱吗? 918事变来历 九一八历史资料 九一八事变的历史意义 九一八历史资料? 九一八事变发生在哪一年 918是哪一年 918事变是什么历史事件 九一八事变是农历几月几日