您当前的位置:首页 > 互联网教程

c语言里const int 和int 有什么区别,const的作用是什么。

发布时间:2025-05-13 18:09:25    发布人:远客网络

c语言里const int 和int 有什么区别,const的作用是什么。

一、c语言里const int 和int 有什么区别,const的作用是什么。

const int&是返回这个数值的一个常量的引用。

而int是返回这个数值的一个拷贝。

int是进行拷贝构造,而const int&是返回的引用。拷贝构造更消耗时间,与此同时还用析构函数。因为产生了一个拷贝,你就可以轻易地修改拷贝的内容。

const int类型一旦定义以后就不能修改,int类型是随时可以修改的。

在取指针方面,const有略复杂的东西,但是常规的、合理的操作不应该涉及到,因为const int是用来保存一些全局常量的,这些常量在编译期可以改,在运行期不能改。

听起来这像宏,其实这确实就是用来取代宏的:#define PI 3.14 const float Pi= 3.14;如果你的代码里用到了100次PI(宏),你的代码中会保存100个3.14这个常数。

鉴于使用常数进行运算的机器代码很多时候会比使用变量来的长,如果你换用100次Pi(const float),程序编译后的机器码里就不需要出现100次常量3.14,只要在需要的时候引用存有3.14的常量就行了。

特别在复杂的运算里,3.14这个常量(其实是无法修改的变量)会被一直装载在寄存器里带来一些性能提升。

constint* p;//p可变,p指向的内容不可变,int const* p;//p可变,p指向的内容不可变。int* const p;//p不可变,p指向的内容可变const int* const p;//p和p指向的内容都不可变。

1、可以定义const常量,具有不可变性。

例如:const int Max=100; Max++会产生错误;

2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

例如: void f(const int i){.........}编译器就会知道i是一个常量,不允许修改;

3、可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变!

如1中,如果想修改Max的内容,只需要它修改成:const int Max=you want;即可!

4、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;

例如: void f(const int i){ i=10;//error!}

5、可以节省空间,避免不必要的内存分配。

当const修饰的是指针类型,那么指针的值就不能改变,即不能指向其他地址,但是可以通过指针修改其指向地址里面的值。

当const修饰时指针指向的类型时候,那么指针被指向其他地址,但是不能通过指针修改指针里面的值。

使用const修饰的i我们称之为符号常量。即,i不能在其他地方被重新赋值了。注意:const int i与int const i是等价的,相同的,即const与int的位置无所谓。

p=&i2;//此处,p可以在任何时候重新赋值一个新的内存地址。

i2=80;//这里能用*p=80来代替吗?答案是不能

分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。

首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;

其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。

二、c语言中const 是什么意思

可以定义const常量,具有不可变性。

例如:const int Max=100; Max++会产生错误;

便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

例如: void f(const int i){.........}编译器就会知道i是一个常量,不允许修改;

可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变!

如(1)中,如果想修改Max的内容,只需要它修改成:const int Max=you want;即可!

可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;

例如: void f(const int i){ i=10;//error!}

可以节省空间,避免不必要的内存分配。例如:

const doublePi=3.14159;//此时并未将Pi放入RAM中......

double i=Pi;//此时为Pi分配内存,以后不再分配!

double I=PI;//编译期间进行宏替换,分配内存

double J=PI;//再进行宏替换,又一次分配内存!

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

扩展资料:const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

三、c语言问题,这些函数后边跟个const 啥意思 求解

const限定符,它把一个对象转换成一个常量。

1.》》const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)

constint*p1=&me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向

int*constp2=&me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。

constint*constp3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向

(b)指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。

(c)const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。

3.》》(a)const与函数。由于2(c),所以经常把函数的形参类型设为const,而且多为const引用。但是这里有一个限制,不能把不是左值的地址传递给引用。(左值包括变量,数组元素,结构成员,引用,被解除引用的指针等)。形参是const类型的,说明该函数将不会修改其值,该函数便为const函数。

(b)const与类成员函数。先看看下面这段代码:

land是常量,但是类成员函数show无法保证不修改land,所以编译器将拒绝执行该段代码。除非你能保证show像const函数一样,但这需要另外一种语法,即:

void Stock::show() const{}//定义