首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )

, const 可以在 数据类型 前面 , 也可以在 数据类型 后面 ; // 下面两个 const 用法相同 const int a; int const a; 二、常量指针 ( 指向 常量 的指针...都不能被修改 ; const char * const c; 四、const 在 * 左右的意义 ---- 普通的数据类型 , const 在数据类型左右作用相同 ; 指针数据类型 , const...* , 指针不能被修改 ; 这是 指针常量 ; const 在 * 左边 ( 常量指针 | const 修饰的是数据类型 ) : const 修饰的是 指针变量 指向的内存空间 , 如 const char...*c , const 修饰的是 char , char 数据不能被修改 , 这是 常量指针 , 指向常量的指针 ; const 修饰的是右边的内容 , 右边是 变量 , 相当于 const 在 * 右边..., 指针常量 , 指针不能修改 ; 右边是 数据类型 , 相当于 const 修饰的是 内存中的数据 , 指针指向的内存不能被修改 ;

2.3K20

【C++】类型转换 ⑤ ( 常量和非常量之间的类型转换 - 常量类型转换 const_cast | const 左数右指原则 | 代码示例 )

| 常量指针 ) 左数右指原则 : 指针 或 数据 的相关常量类型 ; const 在 * 左边 ( 常量指针 | const 修饰的是数据 | 数据是常量不能修改 ) : 如果 const 修饰的是...int const* d; const 在 * 右边 ( 指针常量 | const 修饰的是指针 | 指针是常量不能修改 ) : 如果 const 修饰的是 指针变量 , 如 char * const...) , const 在 * 右侧 指针是常量 不能修改 ( 指针常量 ) ; const 修饰的普通常量 , const 在数据类型的左右两侧都可以 ; 常量类型转换 const_cast 可以 将...char * p 表示修饰的数据是常量 , 指针指向的 字符串 数据不可更改 ; // const char * p 表示修饰的数据是常量 , 数据不可更改 void fun(const char *...转换成 变量指针 的 tmp 指针 , 改变指针指向内存中的数据 ; // const char * p 表示修饰的数据是常量 , 数据不可更改 void fun(const char * str)

47110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++引用和指针以及const常量限定符,能说一二吗?

    指针(可作为对象): 指向一个对象的复合类型,好比如指向一个建筑的地址牌号。注意其本身也是一个对象。...指针与const: 例5 const int a=24; int *p=&a;//错误! const int *p1=&a;//正确!要说明该指针指向的是常量,不能通过指针改变所指对象。...p1作为指向常量的指针,仅限制其本身不能改变所指对象的值,并不限制所指向对象是否常量 例6 int a=24; int *const p=&a;//p将一直指向a,即p是常量指针!...const int b=8; const int *const p1=&b;//p1本身是常量指针,而且指向常量对象! ?...底层const:指针所指对象是const。更一般地,指针与引用等复合类型的基本类型部分是常量时,可称为底层const。

    85820

    【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    void fun(int age, int height) const const 修饰的是 fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 ; C++ 编译器会将 void..., 其本质是修饰 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 ; 将 void fun(int age, int height) const 转换为 C 语言代码为..., int height) // 使用 const 修饰函数 , 其本质是修饰 第一个参数 Student* pThis 指针指向的内存空间 // void Student_fun(const Student.../ // const 修饰的是 fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student.../ // const 修饰的是 fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student

    23020

    C++中四种类型转换以及const_cast是否能改变常量的问题

    ) const_cast一般用于指针或者引用 使用const_cast去除const限定的目的不是为了修改它的内容 使用const_cast去除const限定,通常是为了函数能够接受这个实际参数...可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全。...int i; char *p = "This is a example."; i = reinterpret_cast(p); //此时结果,i与p的值是完全相同的。...二、也许大家都有过这样的疑惑:const_cast可以去除一个常量的const属性,去除const属性后应该可以对“常量”进行修改,通过调试器发现内存中的值是被改变的,可是再传递这个“常量”的时候,值却一直保持原状...,如果程序员不注意而去修改了它会报错,现在我们利用const_cast去除了常量性,然后通过指针和引用对其进行了修改,所以通过指针打印或者引用传参的时候就能看出其内存确实变化了,但为了保护val这个变量本来的

    1.4K100

    const用法小结

    常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述 1. const有什么用途?...如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。...其定义格式如下:   const 类型说明符> & 引用名>   例如:   const double & v;   在实际应用中,常指针和常引用往往用来作函数的形参,这样的参数称为常参数。...使用常参数则表明该函数不会更新某个参数所指向或所引用的对象,这样,在参数传递过程中就不需要执行拷贝初始化构造函数,这将会改善程序的运行效率。   下面举一例子说明常指针作函数参数的作法。...常成员函数说明格式如下:   类型说明符> (参数表>) const; 本质: 成员函数的第一个参数是const this指针,const修饰的成员函数的第一个参数是const T

    98270

    const的那些事

    具体使用如下: (1)指向常量的指针 const int *ptr; *ptr = 10; //error ptr是一个指向int类型const对象的指针,const定义的是int类型,也就是ptr所指向的对象类型...const int p = 10; const void * vp = &p; void *vp = &p; //error 另外一个重点是:允许把非const对象的地址赋给指向const对象的指针。...(3)指向常量的常指针 理解完前两种情况,下面这个情况就比较好理解了: const int p = 3; const int * const ptr = &p; ptr是一个const指针,然后指向了一个...以上解决了两个面试问题: (1)如果函数需要传入一个指针,是否需要为该指针加上const,把const加在指针不同的位置有什么区别; (2)如果写的函数需要传入的参数是一个复杂类型的实例,传入值参数或者引用参数有什么区别...,什么时候需要为传入的引用参数加上const。

    64230

    c和c++的区别(二)const和引用、一级指针、二级指针的结合

    const修饰的是*p,p没有被修饰 int* const p; //距离const最近的类型是int*,修饰的是一个指针变量p。...对于const int* p,其类型为const int*,不管存储的常量的地址 还是变量的地址,都按照其类型存储,即const int*,即使是存储 的是变量的地址也会提升为常量的地址。...10,定义指针的引用变量 int main(){ int *&p = (int*)0x0011fff22;*p=10; //显然这是错误,引用不能用立即数初始化 //结合上边的常引用 const...const int*&p其中,const修饰的是*p,并非引用,是错误的 int * const &p;是正确的 int* const &p=(int*)0x0011ff22;//可以看作是...int* const temp=(int*)0x0011ff22;//临时量存储立即数 int* const &p=temp; } 引用不参与类型,不能说是引用类型 #include<iostream

    46720

    指针——一文搞懂指针

    操作系统:Windows 10 IDE:Visual Studio 2019 文章目录 1 什么是指针 2 指针变量的定义和使用 3 指针所占用的空间 4 空指针和野指针 5 const修饰指针 6...指针变量和普通变量的区别 普通变量存放的是数据,指针变量存放的是地址。 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用。...p = NULL; 野指针 指针变量指向非法的内存空间 int * p = (int *)0x1100; int * p = (int *)0x1100; 指针变量p指向内存地址编号为0x1100的空间...const int * const p 常量指针:const修饰的是指针,指针指向可以改,指针指向的值不可以更改。...const int * p1 = &a; p1 = &b; //正确 //*p1 = 100; 报错 指针常量:const修饰的是常量,指针指向不可以改,指针指向的值可以更改。

    46830

    CC++开发基础——指针与引用

    注意,无论指针变量指向什么类型或者大小的数据,指针变量本身的大小是相同的,指针变量的大小仅仅取决于目标平台的可寻址内存的大小。例如,对于64位的计算机架构,指针变量的大小一般是8个字节。...指针所指向的常量值不可以被修改,但是指针可以被修改为指向其他常量的地址。 此时的指针常用来指向const类型的常量。...const int value {20}; const int* p_value=&value; //const类型的常量value 此时value是一个常量,它的大小不能被修改,但是可以修改p_value...3.引用的初始化 引用的定义方式有些类似于指针,指针在定义的时候,是类型名+"*",引用在定义的时候,是类型名+"&"。...5.函数的const引用传参 很多开发场景经常这样使用,函数在按引用传递参数的同时,加入了const修饰符。

    20020

    const 使用总结

    const和指针与引用一样,指针也可以指向常量或非常量,指向常量的指针不能用于修改其所指对象的值,常量对象的地址只能存放于指向常量的指针中:const int i = 1024;int *p = &i;...int i = 1024;const int *p = &i;*p = 0;// 错误,不能给*p赋值和引用不一样的是,引用不是对象,而指针是对象,因此指针本身可以使用const修饰,这时指针本身就是一个...(ci) x = 512;// x的类型是const intdecltype(cr) y = x;// y的类型是const int&const用于函数参数当const作用于函数的形参时,用实参初始化形参跟变量的初始化规则是一样的...对于形参是指针类型,也适用同样的规则。除了内置类型,对于用户自定义类型,建议使用const的引用传递参数,不要使用传值方式。...const的,即在成员函数的参数列表之后加上const关键字,表示this是一个指向常量的指针,我们也这个成员函数为常量成员函数。

    13210

    【读书笔记】读《程序员面试宝典》

    答:C++语言可以使用const定义常量,也可以使用#define定义常量,但是前者比后者有更多的优点:      *const常量有数据类型,而宏常量没有数据类型。...不完全类型指具有位置存储大小的数据类型,如未知存储大小的数组类型、未知内容的联合或者结构、void类型等。   (3)const成员函数是什么?   ...因为这样意味着函数的返回值是常量,意义就完全不同了。   2.指针与引用     (1)指针与引用的差别?      答:(1)非空引用。在任何情况下都不能使用指向空值的引用。...Long(*fun) (int)    这就是一个典型的函数指针,即指向函数的指针,这个指针的返回类型是Long。带有一个int类型的参数。...返回值为一个指针),返回的这个指针指向的是另外一个函数(参数类型为int,返回值为int类型的函数)。

    83620

    C++从入门到精通——auto的使用

    现在来解释const pstring p1;和char* const p1;的等价性: const pstring p1;中的const修饰的是pstring本身,即指针变量p1是一个常量指针,其值不可更改...它等价于pstring const p1;,这里的const表示指针本身是常量。 char* const p1;中的const修饰的是指针变量p1,即指向的内容是常量,不可更改。...const pstring* p2;表示p2是一个指向pstring类型的常量指针。即,p2是一个指针变量,它指向的是pstring类型的常量。...由于pstring是char*的别名,因此这里p2是一个指向char*类型的常量指针。 现在来看char const *p1,这是C++中另一种定义常量指针的方式。...char const *p1表示p1是一个指向const char类型的指针。也就是说,p1是一个指针变量,它指向的是const char类型的常量。

    53210

    C C++ const 全面总结

    常量指针和指向常量的指针 常量指针和指向常量的指针是不同的概念。下面是具体的代码示例: 指向常量的指针 (pointer to const) 一个指向常量的指针是一个指向常量对象的指针。...自身是常量的指针 (const pointer) int x = 10; int y = 20; int* const ptr = &x; // ptr 是一个常量指针,指向 int 类型 *ptr ...指向常量的引用 (reference to const) 一个指向常量的引用是一个引用常量对象的引用。通过这个引用不能修改所引用的对象。它的声明格式是 const 类型& 引用名。...指向常量的引用 (const 类型& 引用名): 不能通过引用修改所引用对象,但引用自身总是指向最初绑定的对象。 通过这些例子,可以更清晰地理解 const 关键字在指针和引用中的不同应用场景。...什么时候用 const 、什么时候用 define ? 使用 const:当你需要定义一个具有特定类型的不变值,并且这个值只在某个特定区域(比如一个函数或类中)有效时。

    10910

    C++中const小结

    1、const修饰普通变量(非指针变量) const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 对于一个非指针的类型TYPE,这两种写法在本质上是一样的...它的含义是:const修饰的类型为TYPE的变量value是只读的。...//q是一个普通指针,尽管他和p指向同一个地址,却可以通过该指针改变指向的内容 coutp; return 0; } 3、const修饰函数参数 const修饰函数参数是它最广泛的一种用途...修饰引用参数时: void function(const Class& Var);//引用参数在函数内不可以改变 void function(const TYPE& Var); //引用参数在函数内为常量不可变...6、 const修饰类对象/对象指针/对象引用 const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。

    57170

    AboutCPlusPlus之const关键字

    修饰普通类型的变量 对于基本的数据类型,修饰符 cosnt 可以在类型说明符前,也可以用在类型说明符后面,其结果是一样的。...类型和安全检查不同:define 没有类型,不做检查,仅仅是字符替换;const常量有明确的类型,在编译阶段进行类型检查; 存储方式不同:define 是字符替换,有多少地方使用,就会替换多少次,不会分配内存...修饰引用参数:为了增加效率(因为参数为引用不会创建副本)的同时防止被修改,对一般的 int、double 等内置类型,不采用引用的传递方式。...修饰指针或引用的返回值,保证指针指向内容不被改变。 4. 修饰类的成员变量和成员函数 4.1 类的成员变量 const 修饰类的成员变量,表示该成员为常量,不能不修改,只能在初始化列表中赋值。...class A { … const int nValue; //成员常量不能被修改 … A(int x): nValue(x) { } ; //只能在初始化列表中赋值 } 4.2 类的成员函数 const

    56630

    再论C++中的const和引用

    今天给大家分享一下这段时间学习c++的总结学习:c++里面的const关键字和引用。 一、const关键字的总结 1、const什么时候为只读变量,什么时候又是常量呢?...(1)const常量的判别规则: 只用字面量初始化的const常量才会进入符号表 使用其它变量初始化的const常量仍然是只读变量 被volatile修饰的const常量不会进入符号表 在编译期间不能直接确定初始值的.../a.out c = a rc = a trc = c 二、引用的总结: 1、引用与指针有什么关系,以及如何理解"引用的本质就是指针常量"?...(1)指针是一个常量: 值为一个内存地址,不需要初始化,可以保存不同的地址 通过指针可以访问对应内存地址中的值 指针可以被const修饰成为常量或者只读变量 (2)引用只是一个变量的新名字: 对引用的操作...引用是一个变量的新名字 const引用能够生成新的只读变量 在编译器内部使用指针常量实现"引用" 编译时不能直接确定初始值的const标识符都是只读变量 好了,今天的分享就到这里,如果文章中有错误或者不理解的地方

    42410

    1.C和C++区别,以及const分析(底层const顶层const)

    . 3.3 指针const 指针const分为两种: 底层const, 顶层const (普通变量的const(或引用)永远是顶层const,也就是说,const int 和int const本质都一样...其实很好理解,比如 const int *p, 修饰*p是个const常量.而*p是指向对象的内容.所以表示指向对象的内容是常量 但是可以通过其它方式修改内容,例如: int a=1,b=3; const...(位于*右侧) 指针常量,表示不能更改指针指向的地址,只能修改其内容(定义时必须被初始化) 其实很好理解,比如 int * const p, 修饰 p是个const常量.而 p是指向对象的地址.所以表示指向对象的地址是个常量...int *p= (int *)&x; *p=2; printf("x=%d\r\n",x); 输出结果: x=2 2) 当使用const时,赋予的值是volatile类型时,也是以只读变量形式...,因为编译器不能将该volatile类型的变量优化为一个常量 实例: volatile int x=1; const int y=x; //y的值是个volatile型 int

    87720

    const详解

    2.2.3 总结 如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。...== 如果函数作为输出用,不论是什么数据类型,也不论采用指针传递还是引用传递,都不能加const 修饰,否则参数会失去输出功能。...3.2 const修饰函数返回值 修饰返回值,就是不能修改返回值 对于函数来说,返回值如果是int类型的值,就算用const限定,但是函数调用结束会清楚栈,因此没有必要 如果函数返回值是指针的话,我们加上限定符号...但是一般返回引用的地方并不是很多,一般会出现在类的赋值函数中。而且,用const 修饰返回值为引用类型的更少。一般来说不常用。...const成员函数不能修改任何的成员变量,除非变量用mutable修饰。 使用const的好处 可定义常量 防止意外修改造成的错误 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型。

    43330
    领券