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{} 用处:让不想改变的变量不被无意或有意的改变。。。