1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言 const 修饰指针 - C语言零基础入门教程

C语言 const 修饰指针 - C语言零基础入门教程

时间:2022-08-27 04:49:19

相关推荐

C语言 const 修饰指针 - C语言零基础入门教程

目录

一.const 简介二.const 修饰指针 1.const int *p2.int const *p3.int * const p4.const int * const p 三.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.const 简介

const是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量或者常变量的关键字。const 定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以也叫常变量。

const定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。

/******************************************************************************************///@Author:猿说编程//@Blog(个人博客地址): //@File:C语言教程 - C语言 const 修饰指针//@Time:/07/02 08:00//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!/******************************************************************************************/#include <stdio.h>int main() {const int a = 20 ;printf("a = %d\n",a);a = 200 ;printf("a = %d\n",a);return 0;}/*输出:Compilation Failederror: assignment of read-only variable 'a'6 |a = 200 ;|~~^~~~~*/

二.const 修饰指针

首先应该回忆一下指针内容:

int *p = 5;/*p:指针的内存地址,类似门牌号,十六进制表示:0xffff*p:指针的内存地址对应的值,类似门牌号对应里面住的人,即5*/

1.constint*p

当把 const 放最前面的时候,它修饰的就是 *p,那么 *p 就不可变。*p 表示的是指针变量 p 所指向的内存单元里面的内容,此时这个内容不可变。其他的都可变,如 p 中存放的是指向的内存单元的地址,这个地址可变,即 p 的指向可变。但指向谁,谁的内容就不可变。

/******************************************************************************************///@Author:猿说编程//@Blog(个人博客地址): //@File:C语言教程 - C语言 const 修饰指针//@Time:/07/02 08:00//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!/******************************************************************************************/# include <stdio.h>int main(void){int a = 10;const int *p = &a;int * q = &a;*q = 20;printf("a = %d\n", a);a = 30;printf("a = %d\n", a);//const int *p = &a; //表示 *p 值不能发生改变否则 error: assignment of read-only location '* p'//*p = 30; //这么写就是错的return 0;}/*输出:a = 20a = 30*/

2.intconst*p

constint可以互换位置,所以intconst*p 和constint*p 二者是等价的;

3.int*constp

此时 const 修饰的是 p,所以 p 中存放的内存单元的地址不可变,而内存单元中的内容可变。即 p 的指向不可变,p 所指向的内存单元的内容可变。

/******************************************************************************************///@Author:猿说编程//@Blog(个人博客地址): //@File:C语言教程 - C语言 const 修饰指针//@Time:/07/02 08:00//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!/******************************************************************************************/# include <stdio.h>int main(void){const char *p = "hello"; //*p 不可以改变 ,p地址可以改变char* const q = "bbb"; // q地址不能改变p++; //ok//q++; //这句是错误的. error: increment of read-only variable 'q'printf("%s\n",p);printf("%s\n",q);return 0;}/*输出:ellobbb*/

灵魂拷问:知道为什么输出是 “ello” 而不是 “hello” ??

4.constint*constp

*p 和 p 都被修饰了,那么 p 中存放的内存单元的地址和内存单元中的内容都不可变。

/******************************************************************************************///@Author:猿说编程//@Blog(个人博客地址): //@File:C语言教程 - C语言 const 修饰指针//@Time:/07/02 08:00//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!/******************************************************************************************/# include <stdio.h>int main(void){const char * const p = "hello"; //*p 不可以改变 ,p地址不可以改变//*p++; //这句是错误的. error: increment of read-only variable 'p'//p++; //这句是错误的. error: increment of read-only variable 'p'printf("%s\n",p);return 0;}

综上所述,使用const修饰指针可以保护用指针访问内存时由指针导致的被访问内存空间中数据的误更改。因为指针是直接访问内存的,没有拷贝,而有些时候使用指针访问内存时并不是要改变里面的值,而只是要使用里面的值,所以一旦不小心误操作把里面的数据改了就糟糕了。

三.猜你喜欢

C 语言 数组下标越界和内存溢出区别C 语言 指针声明和定义C 语言 指针 p++ / p–C 语言p++/§++/_(p++)/_p++C 语言 使用指针遍历数组C 语言 指针和数组区别C 语言 指针数组和数组指针区别C 语言 空指针 NULLC 语言 void 指针C 语言 野指针C 语言 函数值传递和址传递C 语言 函数缺省参数C 语言 函数不定长参数C 语言 函数指针C 语言 指针函数C 语言 回调函数 callbackC 语言 typedefC 语言 define 定义常量C 语言 define 防止头文件重复包含C 语言 #pragma onceC 语言 #include <> 与 #include “” 区别C 语言 const 修饰变量C 语言 const 修饰指针

未经允许:猿说编程 » C 语言 const 修饰指针

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。