C++函数中const形参与非const形参

合集下载

CC++中CONST用法总结(推荐)

CC++中CONST用法总结(推荐)

CC++中CONST⽤法总结(推荐)1、修饰常量时:const int temp1; //temp1为常量,不可变 int const temp2; //temp2为常量,不可变2、修饰指针时: 主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本⾝为常量;const int *ptr; //*ptr为常量; int const *ptr; //*ptr为常量; int* const ptr; //ptr为常量; const int * const ptr; //*ptr、ptr均为常量;3、const修饰类对象时: const修饰类对象时,其对象中的任何成员都不能被修改。

const修饰的对象,该对象的任何⾮const成员函数都不能调⽤该对象,因为任何⾮const成员函数都会有修改成员变量的可能。

class TEMP{ void func1(); void func2() const; } const TEMP temp; temp.func1(); //错误; temp.func2(); //正确;4、const修饰成员变量: const修饰的成员变量不能被修改,同时只能在初始化列表中被初始化,因为常量只能被初始化,不能被赋值; 赋值是使⽤新值覆盖旧值构造函数是先为其开辟空间然后为其赋值,不是初始化;⽽初始化列表开辟空间和初始化是同时完成的,直接给与⼀个值,所以const成员变量⼀定要在初始化列表中完成。

class TEMP{ const int val; TEMP(int x)val(x){}; //只能在初始化列表中赋值; }5、const修饰类的成员函数 const成员函数表⽰该成员函数不能修改类对象中的任何⾮const成员变量。

⼀般const写在函数的后⾯,形如:void func() const; 如果某个成员函数不会修改成员变量,那么最好将其声明为const,因为const成员函数不会对数据进⾏修改,如果修改,编译器将会报错;class TEMP{ void func()const; //常成员函数,不能修改对象中的成员变量,也不能调⽤类中任何⾮const成员函数; } 对于const类对象,只能调⽤类中的const成员函数,所以const修饰成员函数的作⽤主要就是限制对const对象的使⽤。

c语言 函数 参数 类型

c语言 函数 参数 类型

c语言函数参数类型
C语言的函数参数类型可以分为如下几种:1. 值参数(pass-by-value):函数在调用时将实际参数的值复制给形式参数,函数内对形式参数的操作不会影响实际参数。

2. 指针参数(pass-by-pointer):函数在调用时将实际参数的地址传递给形式参数,函数可以通过指针修改实际参数的值。

3. 数组参数
(pass-by-array):函数可以接受数组作为参数,在函数内可以通过下标访问数组元素。

4. 字符串参数:C语言没有提供字符串类型,通常使用字符数组或指针表示字符串,函数可以接受字符串作为参数。

5. 结构体参数:结构体是一种用户自定义的复合数据类型,函数可以接受结构体作为参数。

6. 变长参数(variable-length argument):使用标准库中的<stdarg.h>头文件,函数可以接受不定数量的参数。

需要注意的是,在C语言中函数的参数传递方式是按值传递的,即实际参数的值会被复制给形式参数,而不是传递实际参数本身。

对于指针、数组和结构体类型的参数,实际参数的地址会被传递给形式参数,但仍然是按值传递的。

这意味着在函数内对形式参数的修改不会影响到实际参数,除非使用指针传递参数。

c++语言static constexpr const的作用和用法

c++语言static constexpr const的作用和用法

c++语言static constexpr const的作用和用法在C语言中,static、constexpr和const这三个关键字都具有特殊的含义,它们在编译时期就有特殊的作用。

首先,我们来看一下static关键字。

在C语言中,static关键字具有多种含义,但在这种情况下,我们主要关注其存储分类的意义。

在C语言中,变量可以根据其存储位置分为三种类型:自动存储分类(automatic storage duration)、静态存储分类(static storage duration)和外部存储分类(external storageduration)。

其中,static关键字修饰的变量具有静态存储分类,它们在程序执行期间只分配一次,其值在整个程序执行期间保持不变。

接下来,我们来看一下constexpr关键字。

在C++11及其后续版本中,constexpr是一个关键字,它用于指示一个变量或函数可以在编译时期进行求值。

当constexpr被应用于一个变量或函数时,编译器会尝试在编译时期就计算出结果,而不是等到运行时期。

这对于编译时就能确定结果的情况非常有用,因为它可以大大提高编译的效率。

最后,我们来看一下const关键字。

在C语言中,const关键字用于声明一个变量的只读性。

当一个变量被声明为const时,它的值就不能被改变。

这对于确保程序的稳定性和防止意外的数据更改非常有用。

这三个关键字在C语言中的组合使用可以产生一些有趣的效果。

例如,我们可以使用static const constexpr来创建一个常量。

这样的常量在编译时期就能求值,并且具有静态存储分类,这意味着它们在整个程序执行期间都保持不变。

这样的常量通常用于定义程序的固定值,例如常数和标志。

另外,我们还可以使用constexpr来创建更高效的常量。

例如,如果我们有一个数组的大小是在编译时期就能确定的话,我们就可以使用constexpr来声明这个数组。

C++中函数后面跟const是什么意思

C++中函数后面跟const是什么意思

C++中函数后⾯跟const是什么意思问题:c++:void display( ) const 中的const是什么意思?简答:意思是除了表明了mutable的成员变量以外该类的其他的成员变量在这个函数内⼀律不能修改。

详细:加const表明,该函数只能是只读的,不能修改私有变量的值。

加强安全性。

给隐含的this指针加const,表⽰这个this指向的东西是const的,也就是说这个函数中⽆法改动数据成员了。

const是⼀种保证,告诉你这个成员不会改变对象的状态。

类的成员函数后⾯加 const,表明这个函数不会对这个类对象的数据成员(准确地说是⾮静态数据成员)作任何改变。

在设计类的时候,⼀个原则就是对于不改变数据成员的成员函数都要在后⾯加 const,⽽对于改变数据成员的成员函数不能加 const。

所以const 关键字对成员函数的⾏为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后⾯,⽽不是在函数前⾯或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。

除此之外,在类的成员函数后⾯加 const 还有什么好处呢?那就是常量(即 const)对象可以调⽤ const 成员函数,⽽不能调⽤⾮const修饰的函数。

正如⾮const类型的数据可以给const类型的变量赋值⼀样,反之则不成⽴。

请看下⾯⼀个完整的例⼦,然后我再作⼀些说明。

CODE:#include#includeusing namespace std;class Student {public:Student() {}Student( const string& nm, int sc = 0 ): name( nm ), score( sc ) {}void set_student( const string& nm, int sc = 0 ){name = nm;score = sc;}const string& get_name() const{return name;}int get_score() const{return score;}private:string name;int score;};// output student's name and scorevoid output_student( const Student& student ){cout << student.get_name() << "/t";cout << student.get_score() << endl;}int main(){Student stu( "Wang", 85 );output_student( stu );}设计了⼀个类 Student,数据成员有 name 和 score,有两个构造函数,有⼀个设置成员数据函数 set_student(),各有⼀个取得 name 和score 的函数 get_name() 和 get_score()。

函数参数const的用法详解

函数参数const的用法详解

函数参数const的用法详解摘要:1.函数参数const 的概述2.const 参数的初始化3.const 参数的优点4.const 参数的注意事项5.const 参数的示例正文:【1.函数参数const 的概述】在C++编程语言中,const 是一种关键字,用于声明常量。

在函数参数中使用const 关键字,可以限制函数对参数的修改,提高代码的安全性和稳定性。

【2.const 参数的初始化】当函数参数被声明为const 时,该参数在函数调用时只能被初始化,不能在函数内部进行修改。

这有助于防止在函数中误修改参数,从而降低程序出错的风险。

【3.const 参数的优点】const 参数有以下优点:- 提高代码的安全性:const 参数可以防止程序员在函数内部误修改参数,避免出现意外的错误。

- 代码可读性:const 参数使得函数的签名更加清晰,易于理解。

- 代码可维护性:const 参数有助于保持函数的功能不变,便于后续维护和修改。

【4.const 参数的注意事项】在使用const 参数时,应注意以下几点:- const 参数只能被初始化,不能在函数内部修改。

如果需要在函数内部修改参数,请不要将其声明为const。

- const 参数可以提高代码的安全性,但并不能保证代码绝对安全。

还需要程序员具备扎实的编程基础和严谨的编程态度。

- const 参数适用于值传递的参数,不适用于指针传递的参数。

对于指针传递的参数,可以使用指针常量来实现类似的功能。

【5.const 参数的示例】以下是一个使用const 参数的函数示例:```cpp#include <iostream>void print_const_value(const int value) {std::cout << "The constant value is: " << value << std::endl;}int main() {int num = 10;print_const_value(num);// print_const_value(num + 1); // 编译错误,因为num 是const 参数,不能在函数内部修改return 0;}```在这个示例中,`print_const_value`函数的参数`value`被声明为const int,表示该参数在函数调用时只能被初始化,不能在函数内部进行修改。

c语言中const的作用

c语言中const的作用

c语言中const的作用
C语言中的const关键字表示常量,其作用是用于声明不可更改的变量。

也就是说,一旦一个变量被声明为const类型,就不能再对其进行赋值操作。

使用const可以带来如下好处:
1.保证变量的值不会被改变。

这在程序中起到了重要的作用,因为一些常量在程序中的值是不允许被改变的。

2.有助于编译器进行优化。

const常量在程序中只需要被读取,而不需要被修改,这样编译器可以将其存储在只读的数据段中,不必在栈或堆上开辟空间。

这样可以减少内存的使用,提高程序的运行速度。

3.提高代码的可读性。

使用const可以使代码更加清晰明了,让其他程序员更容易理解代码的含义。

const可以用于变量、函数参数、函数返回值等,具体用法如下: 1.变量:
const int a = 10; //声明一个const整型变量a,其值为10,不可更改
const char b = 'A'; //声明一个const字符型变量b,其值为'A',不可更改
2.函数参数:
void fun(const int a); //声明一个函数fun,参数为const
类型的整型变量a,表示在函数中a的值不能被修改
3.函数返回值:
const int fun(); //声明一个函数fun,返回值为const类型的整型变量,表示返回值不能被修改
总之,使用const关键字可以提高程序的可靠性、可读性和效率,是C语言中非常实用的关键字。

函数const

函数const

函数const函数const概述在C++中,const关键字用于声明常量,常量是不可修改的变量。

函数const是指在函数声明或定义中使用const关键字,表示该函数不会修改任何类成员变量的值。

语法函数的const修饰方式有两种:1. const成员函数:在成员函数后加上const关键字,表示该成员函数不会修改任何类成员变量的值。

例如:```class MyClass {public:void func() const;};```2. const对象调用成员函数:在对象后加上const关键字,表示该对象是一个常量对象,在调用该对象的成员函数时,不能修改任何类成员变量的值。

例如:```class MyClass {public:void func() const;};int main() {const MyClass obj;obj.func(); // 通过常量对象调用常量成员函数}```注意:如果一个类中没有任何const成员变量或者没有任何const成员函数,则可以省略掉类的默认复制构造函数和默认赋值运算符重载。

实例下面通过一个例子来说明如何使用函数const。

```#include <iostream>using namespace std;class MyClass {public:void print() const; // 常量成员函数private:int m_value;};void MyClass::print() const {cout << "m_value = " << m_value << endl; // 只读取m_value 的值}int main() {const MyClass obj = {10}; // 常量对象obj.print(); // 通过常量对象调用常量成员函数return 0;}```上述代码中,MyClass类中的print()函数被声明为常量成员函数,表示该函数不会修改任何类成员变量的值。

c语言中const的用法

c语言中const的用法

c语言中const的用法c语言中const有着重要的作用,它可以用来确保变量值在执行过程中不被意外改变,避免程序出现混乱的状态。

在编程中,const 指令可以提供一种方式确保变量的值在执行过程中不会被改变。

以下是关于c语言中const的一些用法。

1.义常量const关键字可以用来定义常量,其中的值在程序执行过程中不会发生变化。

例如,定义一个PI常量,其值为3.14:const double PI = 3.14;这就表明PI的值不可以被修改,否则程序将会报错。

定义常量时,变量的声明类型和值要在定义时就确定,之后不能再改变。

2.明指针const关键字也可以用来声明指针,用来防止指针指向的内容被意外修改。

例如:int a = 10;const int* p = &a;这里声明的指针p是const的,它指向的内存空间在程序运行过程中不能被修改,否则程序会报错。

3.定函数参数c语言中const也可以用于在函数声明和定义中限定函数参数。

在函数定义时,可以使用const将参数变量声明为只读,因此它的值在函数中不能改变。

例如:void foo(const int a){a = 10; // error,编译会报错}4. const成员函数const有时也可以用于声明成员函数,表明其为只读操作,不能修改成员变量。

const成员函数不能修改类中数据成员和静态成员,但是可以调用非const成员函数。

例如:class Foo{public:void nonConstFunc();void constFunc() const;private:int m_value;};5. const_castconst_cast也是一种常用的表达式,它可以用于在不同类型之间转换,也可以用于去除const属性。

例如:int a = 10;const int* p = &a;int* p1 = p; // errorint* p2 = const_cast<int*>(p); //const int*转换成int* 以上就是围绕c语言中const的用法做的介绍,它可以用于定义常量、声明指针、限定函数参数和const成员函数等。

const的理解和用法

const的理解和用法

const的理解和用法const的理解和用法const在C中的用法很灵活,下面内容由店铺为大家介绍const的理解和用法,供大家参考!一、关于const的具体定义:——个人感觉很难对它下一个标准的定义,因为的用法很灵活,似乎对它定义后总无法让人能够明白它的意思,而且容易让人产生误解(也许是偶水平太菜了)。

例如,把它有定义:一个能够让变量变成无法修改的常量的关键字。

那么,这样的话,就可能让人误解为只要有const在定义变量里面,那变量就无论怎样都无法修改。

这样的理解是很片面的(下面用法方面将对这问题做探讨)。

因此,本人在此不敢对它下定义,其他参考书好象也没有下定义。

二、关于const的具体作用——const作用就灵活了,一个表达式中const放置的位置不同,效果可能就不一样了。

下面分具体情况分析(当然,所举的情况并非覆盖全部情况)A。

const最经常的用法1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.//Example ->int FindNum(const int array[], int num, int conut);//声明函数//code...int FindNum(const int array[], int num, int count){int i;int flag = 1;for (i = 0; (i < count) && flag; i++){if (array[i] == num){flag = 0;break;}}return flag;}//code...上面这例子中,编译器会把array[]当作常量数据的数组看待。

所以,假如你不小心给数组赋值,那么,编译器就会报错了。

因此,当你不需要也不想修改数组的数据时,最好用const把数组定义为常量数组。

2.const可以用来创建数组常量、指针常量、指向常量的指针等:const char ch = 'a';const int a[5] = {1, 2, 3, 4, 5};const int *p = a; //a是一个数组的首地址.p是指向常量的指针int * const p = a; //a是一个数组的首地址.p是指针常量;const int * const p = a; //a是一个数组的首地址。

C语言const和static

C语言const和static

C语⾔const和static
1. const 是constant 的缩写,“恒定不变”的意思。

被const 修饰的东西都受到强制保护,可以预防意外的变动,能提⾼程序的健壮性。

2. const可以修饰变量,函数的⼊参,函数的返回值
3. static第⼀个作⽤:隐藏. 当我们同时编译多个⽂件时,所有未加static前缀的全局变量和函数都具有全局可见性。

4. static的第⼆个作⽤是保持变量内容的持久。

存储在静态数据区的变量会在程序刚开始运⾏时就完成初始化,也是唯⼀的⼀次初始化。

5. static的第三个作⽤是默认初始化为0。

其实全局变量也具备这⼀属性,因为全局变量也存储在静态数据区。

在静态数据区,内存中所
有的字节默认值都是0x00,某些时候这⼀特点可以减少程序员的⼯作量。

const函数的意义和作用

const函数的意义和作用

const函数的意义和作用摘要:1.概述const函数的概念2.const函数的优点3.const函数的适用场景4.使用const函数的注意事项5.总结const函数的意义和作用正文:在我们编写程序时,经常会用到const函数。

那么,const函数到底有何意义和作用呢?接下来,我们将从以下几个方面来详细探讨const函数的特点和应用。

1.概述const函数的概念const函数是一个具有特殊作用的函数,它用于声明一个函数的参数和返回值都是常量。

在C++中,const关键字可以用于修饰函数参数、函数返回值以及函数内部的变量。

使用const关键字可以提高代码的可读性和安全性。

2.const函数的优点(1)提高代码可读性:使用const关键字可以让调用者清楚地知道函数的参数和返回值都是常量,从而提高代码的可读性。

(2)提高代码安全性:const函数的参数和返回值都不能被修改,可以有效防止意外的错误操作,提高代码的安全性。

(3)优化性能:编译器可以对const函数进行优化,如减少内存分配等,从而提高程序的运行性能。

3.const函数的适用场景(1)需要保护数据不受到意外修改的场景:当一个函数的参数容易被误操作时,可以使用const关键字对其进行保护。

(2)需要确保函数返回值不变的场景:当一个函数的返回值需要保持不变时,可以使用const关键字确保其不被修改。

4.使用const函数的注意事项(1)const关键字只能用于声明常量,不能用于设置或修改已有变量的值。

(2)const函数的返回值必须是常量,因此在函数体内分配的临时变量不能使用const关键字修饰。

(3)const函数的参数可以是常量、变量或指针,但不能是数组。

5.总结const函数的意义和作用const函数是一种具有特殊作用的函数,它有助于提高代码的可读性、安全性和性能。

在实际编程过程中,根据需要合理使用const函数,可以有效降低程序出错概率,提高代码质量。

C语言之const与static用法

C语言之const与static用法
short l;//sizeof(l)==2 char *a = "abcddd";//sizeof(a)==4 void *s = malloc(100);//sizeof(s)==4 char b[] = "abcddd";//sizeof(b)==7*1 float c[20];//sizeof(c)==20*4; 例二: struct A
double a1;
long a; int a2;
char b;
};
#pragma pack()//sizeof(B)==17 说明:例二中演示了数据对其的情况,由于 CPU 访问数据的特点是一次访问多个字节,故如果多字节 数据的首地址是 2 的整数倍的话,将可以一次内存访问即可取得其所对应的所有数据,所以一个优化 要求就是变量的地址是其数据类型长度的整数倍,例如 int a 的 a 的地址要求是 4 的整数倍。 针对结构体,如果结构体中所有元素类型相同,作为数组处理,入 struct A;否则一般都是其最常 元素的整数倍,例如 struct B 和 C。这样处理的目的是考虑定义结构体数组的情况,例如 struct B b[10];那么这 10 个结构体变量如果每个长度都是 8,将能保证每个变量的第一个元素都能是 4 的整 数倍,否则将达不到这个效果,不能实现高效的内存访问,故编译器将对不符合要求的结构体自动调 整数据对齐。 最后需要交代的是,class 中的 static 变量不被分配到栈上,所以不能计入 sizeof 中,空类的长度 是 1,有虚函数的长度为 4,因为包含一个指向函数表的指针。 下面分析几个面试题: 例一:
void fstatic(void); static void fstatic(void) {

c语言中的const的作用及解析

c语言中的const的作用及解析

c语⾔中的const的作⽤及解析有时候我们希望定义这样⼀种变量,它的值不能被改变,在整个作⽤域中都保持固定。

例如,⽤⼀个变量来表⽰班级的最⼤⼈数,或者表⽰缓冲区的⼤⼩。

为了满⾜这⼀要求,可以使⽤const关键字对变量加以限定:1. const int MaxNum = 100; //班级的最⼤⼈数这样 MaxNum 的值就不能被修改了,任何对 MaxNum 赋值的⾏为都将引发错误:1. MaxNum = 90; //错误,试图向 const 变量写⼊数据我们经常将 const 变量称为常量(Constant)。

创建常量的格式通常为:const type name = value;const 和 type 都是⽤来修饰变量的,它们的位置可以互换,也就是将 type 放在 const 前⾯:type const name = value;但我们通常采⽤第⼀种⽅式,不采⽤第⼆种⽅式。

另外建议将常量名的⾸字母⼤写,以提醒程序员这是个常量。

由于常量⼀旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(初始化),后⾯的任何赋值⾏为都将引发错误。

⼀如既往,初始化常量可以使⽤任意形式的表达式,如下所⽰:1. #include <stdio.h>2.3. int getNum(){4. return 100;5. }6.7. int main(){8. int n = 90;9. const int MaxNum1 = getNum(); //运⾏时初始化10. const int MaxNum2 = n; //运⾏时初始化11. const int MaxNum3 = 80; //编译时初始化12. printf("%d, %d, %d\n", MaxNum1, MaxNum2, MaxNum3);13.14. return 0;15. }运⾏结果:100, 90, 80const 和指针const 也可以和指针变量⼀起使⽤,这样可以限制指针变量本⾝,也可以限制指针指向的数据。

const函数形参

const函数形参

const函数形参在C++中,const关键字可以用于不同的语法环境中,如在函数声明中指定常量参数、修饰类的成员函数等。

本文将重点介绍const函数形参的相关知识。

一、什么是const函数形参const函数形参是指在函数参数表中使用const关键字修饰形参的类型或变量。

其目的是限定函数在使用该参数时不能改变该参数的值,同时显式地表示该参数是常量,增强程序的可读性和可维护性。

二、const函数形参的使用方法const函数形参的使用方法与普通函数形参的使用方法基本相同,只需在形参类型或变量名前加上const关键字即可。

例如:```void func(const int x, const string& str);```在上述函数声明中,参数x和str都被声明为const类型,不能在函数内部被改变。

三、const函数形参的作用1. 提高程序的安全性使用了const函数形参后,函数内部不能改变该参数的值,可以有效避免非法修改该参数导致程序崩溃的情况发生。

同时,使用const 函数形参可以防止函数在运行时意外地修改了外部变量的值。

2. 改善程序的可读性和可维护性在函数声明中使用const函数形参可以对函数调用者和程序员都起到一定的提示和约束作用,显式地表示该参数是常量,不能被修改。

同时,使用const函数形参有助于程序员更好地理解代码的意图,提高代码的可读性和可维护性。

3. 支持函数重载使用const函数形参可以支持函数重载,使得函数在参数类型不同的情况下可以有不同的行为,提高了代码的灵活性和可扩展性。

例如:```void func(int x); // 第一个版本void func(const int x); // 第二个版本```在上述代码中,第一个版本的参数类型为int,可以在函数内部被改变;第二个版本的参数类型为const int,不能在函数内部被改变。

四、注意事项1. 函数定义和声明要一致如果在函数声明中使用了const函数形参,那么在函数定义时也要使用相同的形参类型,否则会导致编译器报错。

函数 const

函数 const

函数 const函数const是C++中一个重要的关键字,它在程序设计中起到了非常重要的作用。

函数const是一个限制符,它用于限制函数的修改能力,即在函数中不允许修改对象的值。

本文将从函数const的基本概念、使用方法和应用场景等方面进行详细介绍。

一、函数const的基本概念函数const是C++中的一个关键字,它可以用来修饰函数的返回值或函数的参数。

用const修饰函数返回值时,表示函数返回的值是一个常量,不能被修改;用const修饰函数参数时,表示函数不会修改该参数的值。

二、函数const的使用方法1. 用const修饰函数返回值如果一个函数的返回值是一个常量,可以在函数声明或定义时使用const来修饰函数的返回值。

例如:const int getValue() {// 函数体}上述代码中,getValue函数返回的是一个常量int类型的值,不能被修改。

2. 用const修饰函数参数如果一个函数的参数是一个常量,可以在函数声明或定义时使用const来修饰函数的参数。

例如:void printValue(const int value) {// 函数体}上述代码中,printValue函数的参数value是一个常量,不能被修改。

三、函数const的应用场景1. 防止误操作使用函数const可以防止程序员在不经意间修改对象的值,从而避免一些不必要的错误。

2. 优化程序性能使用函数const可以帮助编译器进行优化,从而提高程序的性能。

由于函数const限制了函数的修改能力,编译器可以在编译时对程序进行优化,减少不必要的内存访问和计算,从而提高程序的性能。

3. 提高代码可读性使用函数const可以提高代码的可读性,使程序更易于阅读和理解。

当程序员看到一个被const修饰的函数或变量时,就能立即知道该函数或变量是一个常量,不能被修改,从而减少了程序员的思考时间,提高了代码的可读性。

四、总结函数const是C++中一个非常重要的关键字,它可以用来限制函数的修改能力,防止误操作,优化程序性能,提高代码可读性等。

c中const的用法

c中const的用法

c中const的用法在C语言中,const是一个关键字,用于修饰变量、函数参数和函数返回值,表示该值不能被修改。

const关键字在C语言中被广泛用于提高程序的稳定性和安全性。

本文将介绍const在C语言中的用法。

一、const修饰变量1. 局部变量:在函数内部声明的局部变量,如果用const修饰,则该变量在函数内部是只读的,不能被修改。

2. 全局变量:在代码中声明的全局变量,如果用const修饰,则该全局变量在程序执行期间是只读的,不能被修改。

例如:```cconst int my_variable = 10; //全局常量变量void my_function() {const int local_variable = 5; //局部常量变量//...函数内部使用local_variable,但不能修改它}```二、const修饰指针1. 指向常量的指针:指向一个常量的指针,指向的变量不能被修改。

2. 指向普通变量的指针:如果一个指针指向一个普通变量,用const修饰该指针,表示该指针不能被用来修改它所指向的变量的值。

例如:```cint my_variable = 10;int* const p = &my_variable; // p指向my_variable,不能通过p来修改my_variable的值```三、const修饰函数参数和返回值1. 函数参数:如果一个函数接受一个常量指针或常量引用作为参数,则该参数的值不能被修改。

2. 返回值:如果一个函数返回一个常量指针或常量引用,则该函数的返回值不能被修改。

例如:```cconst int* get_constant_pointer() { //返回一个指向常量的指针return &my_variable; //my_variable不能被修改}```四、注意事项1. const关键字只保证变量的值不能被修改,但不能保证指针所指向的内存空间不会被释放或重新分配。

const char在c语言中的用法

const char在c语言中的用法

const char在c语言中的用法const char 在 C 语言中的用法在 C 语言中,const char 是用来声明一个指向字符常量的指针。

可以将 const char 视为字符数组的首地址,用于访问存储在内存中的字符串。

常见的用法包括以下几种:1. 字符串常量的声明:const char *str = "Hello World!";上述语句将创建一个指向字符常量 "Hello World!" 的指针 str。

由于字符串常量在内存中是只读的,因此使用 const 来确保字符串不会被修改。

2. 字符数组的传递:在函数参数中,可以使用 const char * 来接收一个字符数组,以避免对数组进行修改。

这样可以确保传递进来的字符串不会被改变。

3. 字符串比较:由于 char 类型可以与整数类型进行比较,因此可以使用 const char 来进行字符串的比较操作,以判断两个字符串是否相等。

4. 字符串拼接:借助指针的特性,可以通过将两个const char 指针相加,实现字符串的拼接。

需要注意的是,const char 声明的指针本身是可以被修改的,但是指向的字符内容是只读的。

因此,通过 const char 指针访问字符串时,不应该尝试修改其中的字符。

总结:const char 在 C 语言中用于声明指向字符常量的指针。

它的主要用途包括字符串常量的声明、字符数组的传递、字符串比较和拼接等操作。

通过const char 指针,可以确保字符串的内容不会被修改,增加代码的可读性和安全性。

const形参和实参

const形参和实参

const形参和实参顶层const作⽤于对象本⾝:const int ci = 42;//不能改变ci,const是顶层的int i = ci;//正确:当拷贝ci时,忽略了它的顶层constint* const p = &i;//const是顶层时,不能给p赋值*p = 0;//正确:通过p改变对象的内容是允许的,现在i变成了0⽤实参初始化形参时会忽略形参的顶层const。

当形参有顶层const时,传给它常量对象或者⾮常量对象都是可以的:void fcn(const int i) {/* fcn能够读取i,但是不能向i写值*/ }调⽤fcn函数时,既可以传⼊const int 也可以传⼊int。

忽略形参的顶层const可能产⽣意想不到的结果:void fcn(const int i){/*fcn能够读取i,但是不能向i写值*/ }void fcn(int i){/* ... */ }//错误:重复定义了fcn(int)C++允许定义若⼲具有相同名字的函数,不同函数的形参列表应有明显的区别。

因为顶层const被忽略掉了,所以上⾯的代码传⼊两个fcn函数的参数可以完全⼀样。

因此第⼆个fcn是错误的,尽管形式上有差异,但实际上它的形参和第⼀个fcn的形参没什么不同。

指针或引⽤形参与const可以使⽤⾮常量初始化⼀个底层const对象,反过来不⾏。

同时⼀个普通的引⽤必须⽤同类型的对象初始化:int i = 42;const int* cp = &i;//正确:但是cp不能改变iconst int& r = i;//正确:但是r不能改变iconst int& r2 = 42;//正确int* p = cp;//错误:p的类型和cp的类型不匹配int& r3 = r;//错误:r3的类型和r的类型不匹配int& r4 = 42;//错误:不能⽤字⾯值初始化⼀个⾮常量引⽤将同样的初始化规则应⽤到参数传递上可得:int i = 0;const int ci = i;string::size_type ctr = 0;reset(&i);//调⽤参数类型是int*的reset函数reset(&ci);//错误:不能⽤指向const int对象的指针初始化int *reset(i);//调⽤形参类型是int&的reset函数reset(ci);//错误:不能把普通引⽤绑定到const对象ci上reset(42);//错误:不能把普通引⽤绑定到字⾯值上reset(ctr);//错误:类型不匹配,ctr是⽆符号类型find_char("Hello World", 'o', ctr);//正确:find_char的第⼀个形参是对常量的引⽤调⽤引⽤版本的reset,只能使⽤ int 类型的对象,⽽不能使⽤字⾯值、求值结果为 int 的表达式、需要转换的对象或者 const int 类型的对象。

c语言中形参和实参的概念

c语言中形参和实参的概念

C语言中形参和实参的概念
}
在上述例子中,函数add的形参为a和b,它们在函数定义中被声明。在main函数中,x和 y被传递给add函数作为实参。在函数调用过程中,x和y的值被复制给a和b,函数内部计算了 它们的和并输出结果。
C语言中形参和实参的概念
形参和实参之间的关系如下:
- 形参和实参的个数、类型和顺序必须匹配。即函数定义中声明的形参的个数、类型和顺 序必须与函数调用时传递的实参一致。
- 当函数被调用时,实参的值被复制给对应的形参。这意味着在函数内部修改形参的值不 会影响到实参的。C语言中默认采用 的是值传递,即实参的值被复制给形参。但通过传递指针或引用,可以实现对实参的修改。
C语言中形参和实参的概念
在C语言中,形参和实参是函数调用中的两个重要概念。
1. 形参(Formal Parameter):形参是函数定义中声明的参数,用于接收函数调用时传 递的实参的值。形参在函数定义时被定义,并在函数体内使用。形参的作用类似于函数内部 的局部变量,它们的值由实参传递给函数。
2. 实参(Actual Parameter):实参是函数调用时传递给函数的值或表达式。实参可以 是常量、变量、表达式或函数的返回值。实参在函数调用时被传递给函数,并用于初始化对 应的形参。
C语言中形参和实参的概念
例如,下面是一个函数定义和调用的例子: void add(int a, int b) {
int sum = a + b; printf("The sum is: %d\n", sum); } int main() { int x = 5; int y = 3; add(x, y); // 函数调用,x和y为实参 return 0;

const的作用

const的作用

const的作⽤const是C语⾔的⼀种关键字,起受保护,防⽌以外的变动的作⽤!可以修饰变量,参数,返回值,甚⾄函数体。

const可以提⾼程序的健壮性,你只管⽤到你想⽤的任何地⽅。

(⼀)const修饰参数。

const只能修饰输⼊参数。

1、如果输⼊参数是指针型的,⽤const修饰可以防⽌指针被意外修改。

2、如果参数采⽤值传递的⽅式,⽆需const,因为函数⾃动产⽣临时变量复制该参数。

3、⾮内部数据类型的参数,需要临时对象复制参数,⽽临时对象的构造,析构,复制较为费时,因此建议采⽤前加const的引⽤⽅式传递⾮内部数据类型。

⽽内部数据类型⽆需引⽤传递。

(⼆)const修饰函数返回值。

1、函数返回const指针,表⽰该指针不能被改动,只能把该指针赋给const修饰的同类型指针变量。

2、函数返回值为值传递,函数会把返回值赋给外部临时变量,⽤const⽆意义!不管是内部还是⾮内部数据类型。

3、函数采⽤引⽤⽅式返回的场合不多,只出现在类的赋值函数中,⽬的是为了实现链式表达。

(三)const+成员函数。

任何不修改数据成员的函数都应该声明为const类型,如果const成员函数修改了数据成员或者调⽤了其他函数修改数据成员,编译器都将报错!class stack{public:int GetCount(void) const ;private:int m_num;};int stack::GetCount(void) const{m_num++;}编译器输出错误信息:error C2166: l-value specifies const object。

(四)const 修饰变量,表⽰该变量不能被修改。

1、const char *p 表⽰指向的内容不能改变2、char * const p,就是将P声明为常指针,它的地址不能改变,是固定的,但是它的内容可以改变。

3、这种const指针是前两种的结合,使得指向的内容和地址都不能发⽣变化.const double pi = 3.14159;const double *const pi_ptr = π1) 关键字const的作⽤是为给读你代码的⼈传达⾮常有⽤的信息,实际上,声明⼀个参数为常量是为了告诉了⽤户这个参数的应⽤⽬的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++函数中const形参与非const形参
在程序设计中我们会经常调用函数,调用函数就会涉及参数的问题,那么在形参
列表中const形参与非const形参对传递过来的实参有什么要求呢?
先来看一个简单的例子:
[cpp]view plaincopy
1.#include <iostream>
2.#include <string>
ing namespace std;
4.void print_str(const string s)
5.{
6. cout<<s<<endl;
7.}
8.int main()
9.{
10. print_str("hello world");
11.return 0;
12.}
毫无疑问,const实参传递给const形参,正确调用函数,如果你将第4行代码中的const去掉,也能得到正确的结果。

那么在去掉const的基础上将形参变为引
用形参,会出现什么样的结果呢?看下面的代码:
[cpp]view plaincopy
1.#include <iostream>
2.#include <string>
ing namespace std;
4.void print_str( string & s)
5.{
6. cout<<s<<endl;
7.}
8.int main()
9.{
10. print_str("hello world");
11.return 0;
12.}
发现编译不通过,如果在第4行的string前加上一个const,就会通过编译。

进一步研究我们会发现指针形参与引用形参会出现类似的情况。

普通形参加不加const限定符对实参没有影响,引用形参和指针形参前面没有const限定符时,实参必须是非const的,而前面有const限定符时对实参也没有什么影响。

为什么会出现这种情况?
原因在于实参的传递方式不同,函数中的形参是普通形参的时,函数只是操纵的实参的副本,而无法去修改实参,实参会想,你形参反正改变不了我的值,那么你有没有const还有什么意义吗?引用形参和指针形参就下不同了,函数是对实参直接操纵,没有const的形参时实参的值是可以改变的,这种情况下怎能用函数来操纵const实参呢。

const引用的好处:
a. 当实参的类型比较大时,复制开销很大(形参初始化时),引用会“避免复制”。

(这在传递类对象时比较常用)
b. “避免修改实参”,当使用引用时,如果调用者希望只使用实参并不修改实参,则const可以避免使用该引用修改实参
c. 相比非const引用形参,更具实用性:形参可以使用const对象初始化,可使用字面值或右值表达式的实参来初始化
下面各给一示例
a. void search(const vector<int>&vec) 避免了实参的复制开销
b. 同a例,可避免对实参做出修改
c. 如下函数,调用时
void search(string & s); 调用:search("hello"); // Error 实参为字面值常量void search(const string & s); 调用:search("hello"); // OK
再如
void search(int & v); 调用:search(v1+v2); // Error 实参是一个右值,无法给引用赋值(需要左值)
void search(const int & v); 调用:search(v1+v2); // OK。

相关文档
最新文档