C语言中的const是神魔意思?

作者&投稿:戚董 (若有异议请与网页底部的电邮联系)
c语言中const 是什么意思,怎么用,什么时候用?~

const 表示常量,相当于宏定义,只能读取,不能修改。

常变量:const 数据类型 符号常变量 = 数值
如:const float PI=3.14;

指针常量:
数据类型 *const 指针变量=变量名
如:char *const p="abc";
const修饰的是指针变量,而不是指针的值,所以指针指向的值是可以修改的。

常指针:
const 数据类型 *指针变量=变量名
或者是
数据类型 const *指针变量=变量名
这是指针指向的值就是不可以改变的。

还有一种情况就是指针变量本身不可以修改,指针指向的值也是不允许修改的,就是指针常量和常指针组合,这种称为
常指针常量:
const 数据类型 *const 指针变量=变量名

数据类型 const *const 指针变量=变量名

还有一个比较重要的就是常函数:这个我自己还是前一段时间刚刚理解,建议你看看这个网页:http://blog.csdn.net/JimFire/archive/2008/10/06/3020013.aspx。

const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。
const关键字使用非常的灵活,这一点和php差别很大,php中const用来在类中定义一个常量,而在c中,const因位置不同有不同的作用,因情景不同有不同的角色,使用起来也是非常的灵活。
一、const用来修饰普通的变量(指针变量除外)的时候,const type name 和 type const name 这两种形式是完全等价的,都表示其是常量,不能进行修改。
二、const用来修饰指针变量的时候,分为以下四种情况
1、const type *name :这种情况下,const修饰的指针变量name所指向的type类型对象,也就是说指向的这个对象是不能进行修改的,因为其是常量,而指针变量确实可以进行修改的。
2、type const *name :这种情况下,const修饰的指针变量name所指向的type类型对象,意思完全同上,只是颠倒了以下顺序。
3、type * const name :这种情况下,const修饰的指针变量name,也就是说这个指针变量的值是不能进行修改的,但是指针变量所指向的对象确实可以修改的。
4、const type * const name :这种情况下,const修饰的指针变量name以及指针变量name所指向的对象,也就是说这个指针变量以及这个指针变量所指向的对象都是不能进行修改的。

扩展资料使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。
在c中,对于const定义的指针,不赋初值编译不报错,int* const px;这种定义是不允许的。(指针常量定义的时候对其进行初始化)int const *px;这种定义是允许的。(常指针可以再定义的时候不初始化)
但是,在C++中int* const px;和const int* const px;会报错,const int* px;不报错。必须初始化指针的指向int* const px = &x;const int* const px=&x;强烈建议在初始化时说明指针的指向,防止出现野指针!
参考资料来源:百度百科—CONST

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。
参考资料:http://baike.baidu.com/view/1065598.htm

const变量是指常量。即恒定的变量,即不可改变的变量。
比如const int a = 10;
那么你在后面就不可以改变a的指。
又比如const int *a;
指的这个指针不会改变它所指向的内容
int b;
再比如int* const a = &b;
指的这个指针只能指向b的地址,而不能是其它地址

const是constant的缩写,恒定不变。
用这个关键字声明的变量是在程序中是不能被改变的。
1.定义常量
如:const int a=10;
a=90; //编译器报错,因为a为常量
2.定义函数返回值为常数,必需赋值给const类型的变量。
如:const int A(){return 100;}
3.常函数,在常函数中不允许对任何变量做改动。
int A() const{a=100;}//报错,不允许更改变量
4.常引用,当用户自定义某个类的实例需要作为某函数的形参时,最好的办法是引用,无需构造和析构过程,若不希望对这个实例做改动就需要常引用。
如: class test{//很多成员...........};
test t;
void A(const &t);

const修饰符可以把对象转变成常数对象,什么意思呢?

意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!

使用方法是:

const int a=1;//这里定义了一个int类型的const常数变量a;

但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆!

我们来看一个如下的例子:

#include <iostream>
using namespace std;

void main(void)
{
const int a=10;
int b=20;

const int *pi;
pi=&a;
cout <<*pi << "|" << a <<endl;
pi=&b;
cout <<*pi << "|" <<b <<endl;
cin.get();
}

上面的代码中最重要的一句是 const int *pi
这句从右向左读作:pi是一个指向int类型的,被定义成const的对象的指针;
这样的一种声明方式的作用是可以修改pi这个指针所指向的内存地址却不能修改指向对象的值;

如果你在代码后加上*pi=10;这样的赋值操作是不被允许编译的!

好,看了上面的两个例子你对const有了一个基本的认识了,那么我们接下来看一个很容易混淆的用法!

请看如下的代码:

#include <iostream>
using namespace std;

void main(void)
{
int a=10;

const int *const pi=&a;

cout <<*pi << "|" <<a <<endl;
cin.get();
}

上面的代码中最重要的一句是 const int *const pi
这句从右向左读作:pi是一个指向int类型对象的const指针;

这样的一种声明方式的作用是你既不可以修改pi所指向对象的内存地址也不能利用指针的解引用方式修改对象的值,也就是用*pi=10这样的方式;

所以你如果在最后加上*pi=20,想试图通过这样的方式修改对象a的值是不被允许编译的!

结合上面的两点所说,把代码修改成如下形式后就可以必然在程序的任意的地方修改对象a的值或者是指针pi的地址了,下面的这种写法常被用语涵数的形式参数,这样可以保证对象不会在涵数内被改变值!

#include <iostream>
using namespace std;

void main(void)
{
const int a=10;//这句和上面不同,请注意!

const int *const pi=&a;

cout <<*pi << "|" <<a <<endl;
cin.get();
}

你们不要把楼主搞晕了。贴那么长谁能看呀?
其实,你只要会区分如下三种情况就可以了,具体的小细节的东东当你以后使用的时候慢慢体会就好了。
三种情况:"const char* ch" & "char* const ch" &"const char* const ch"
第一种:"const char* ch"
这是表示,所指向的char类型内容是不能变的,指针可以变。
第二种:"char* const ch"
这是表示,所指向的char类型内容是可以变的,但是指针不可以变。
第三种: "const char* const ch"
这是表示,所指向的char类型内容是不可以变的,指针也是不可以变的。
明白了以上三种情况,其它的就不在话下了。

回答完毕。


C语言中的const string &T是什么意思
const表示参数传进来后不能被修改 &表示引用的形式传递参数 意思就是以引用的形式传递常量字符串string T 在函数内常量字符串不能被修改

在c语言中修饰符的用法
在(a)中,const前面没有类型,它就修饰它后面的那个int类型。在(b)中,const修饰它前 面的int类型,两者没有任何区别。 再看另一个稍复杂一点的例子,下面两条语句却不相同: (c)const int *pi = 0; \/* 相当于int const *pi = 0; pi是一个指向const int的指针,复引用此运算符为得到一...

C语言const的这个优点怎么解释?
这种说法,个人认为不是很确切,显然没有考虑编译器优化的可能性,const修饰的变量完全有可能被编译器直接优化为常量 另外,那个例子也是完全错误的 这里 double i=Pi; file:\/\/此\/时为Pi分配内存,以后不再分配!double I=PI; file:\/\/编\/译期间进行宏替换,分配内存 (\/\/宏替换,,为啥分配内存?

c语言中const各种写法
int *const p: const 离p近,说明p的指向不能变,即p开始指向哪个变量就只能指向这个变量,不能更改.但p指向的变量可以变.int const *p: const离*p近,说明p的指向可能变,但p指向的变量不可以变.const int *p同int const *p.至于 const * int p;没见过这种写法,我不太清楚这种写法是否合法!

c语言里const int 和int 有什么区别,const的作用是什么。
在取指针方面,const有略复杂的东西,但是常规的、合理的操作不应该涉及到,因为const int是用来保存一些全局常量的,这些常量在编译期可以改,在运行期不能改。听起来这像宏,其实这确实就是用来取代宏的: #define PI 3.14 const float Pi = 3.14; 如果你的代码里用到了100次PI(宏),你的...

C语言中const有什么用途
const关键字的作用主要有以下几点:(1)可以定义const常量,具有不可变性。 例如: const int Max=100; int Array[Max];(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { ...} 编译器就会知道i是一个常量,不允许修改;(3)可以避免意义...

c语言函数中定义的const常量在主函数中可以用吗
1.你需要理解作用域的概念,在一个花括号(函数)里声明的变量仅仅在这里面有效。2.const是个常量,如果你用它来做sum的话它将无法被改变,只能在初始化的时候赋值,所以自然每一次都是一样的。3.如果你希望一个变量在下次调用这个函数的时候仍然保留上次的数据,可以使用static。4.static和const可以...

用C语言给arm编程,const是什么含义?
const定义的数据类型是常量,编译器编译后存储在CODE(ROM、FLASH等)空间

c语言里const int 和int 有st的作用是什么。
在C语言中,const int 和 int 的主要区别在于它们的性质和使用场景。首先,const int 的返回值是一个常量的引用,这意味着它不会进行拷贝构造,节省了时间和内存,且内容不可变,如PI这类全局常量,使用const可以避免代码中多次出现相同的值,提高性能。相比之下,int 返回的是一个值的拷贝,可以修改...

C++语言中const char*的意思
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。如你所说的,const char*="abcdef";char*在这个的函数中,不可以再另外赋值。如后面有char*="abf";之类的,会报错

沿滩区18272252109: C语言中的const是神魔意思? -
解贵中华: const变量是指常量.即恒定的变量,即不可改变的变量.比如const int a = 10; 那么你在后面就不可以改变a的指.又比如const int *a;指的这个指针不会改变它所指向的内容 int b;再比如int* const a = &b;指的这个指针只能指向b的地址,而不能是其它地址

沿滩区18272252109: c语言中const 是什么意思? -
解贵中华: 可以定义const常量,具有不可变性.例如:const int Max=100; Max++会产生错误;便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患.例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改;可以避免...

沿滩区18272252109: 计算机C语言中的关键字:const是什么意思? -
解贵中华: 常量 储存于硬盘上的,不用占用内存 但是 编译之后无法修改 运行过程中也不能修改

沿滩区18272252109: c++ 在函数后加const是什么意思? -
解贵中华: const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助.

沿滩区18272252109: C++中的const是什么? -
解贵中华: const 基本词义 n. 常数;常量;结构;构造;康铜;铜镍合金;建筑;建筑物 而const定义是带有类型的,定义的是变量,它有实际内存,只是这个内存是不可以更改的. 所以从C++中提倡使用const变量 在C语言中 const修饰符可以把对象转变...

沿滩区18272252109: 什么意思C++中viodBrass?C++中viodBrass:
解贵中华: :1. 在C语言中,const的意思是“一个不能被改变的普通变量”,它总是占用存储空间而且它的名字是全局的.C编译器不能把const堪称一个编译器间的常量.所以在C中你可以这么写: const int bufsize;//不赋值. 但不能这么写: cosnt bufsize = 100;

沿滩区18272252109: c语言中const、static关键字的用法? -
解贵中华: 1. const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.2. const可以修饰变量,函数的入参,函数的返回值3. static第一个作用:隐藏 当我们同时编译多个文件时,...

沿滩区18272252109: “const”是什么意思? -
解贵中华: 名词,有以下几种含义:常数,常量,结构,构造,康铜,铜镍合金,建筑,建筑物 . c语言中const 的含义及用法: const 表示常量,相当于宏定义,只能读取,不能修改. 常变量:const 数据类型 符号常变量 = 数值,如:const float PI=3....

沿滩区18272252109: C语言中的const string &T是什么意思 -
解贵中华: const表示参数传进来后不能被修改&表示引用的形式传递参数 意思就是以引用的形式传递常量字符串string T 在函数内常量字符串不能被修改

沿滩区18272252109: const定义是真么意思 -
解贵中华: const是常量的意思. 举个例子,圆周率为3.14......这个圆周率是固定的,那么它就是一个常量,因为圆周率不是你所能更改的.天上只有一个太阳可可以看成一个常量,因为你不可能更改成天上九个太阳,哈哈const int num=3.14; 那么这个num你只能去调用它,而不能去修改它.他就是固有的常量.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网