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

目录

  • 一.const 简介
  • 二.const 修饰指针
    • 1.const int *p
    • 2.int const *p
    • 3.int * const p
    • 4.const int * const p
  • 三.猜你喜欢

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

一.const 简介

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

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

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/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.const int *p

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

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/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 = 20
a = 30*/

2.int const *p

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

3.int * const p

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

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/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.const int * const p

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

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 const 修饰指针
//@Time:2021/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 修饰指针可以保护用指针访问内存时由指针导致的被访问内存空间中数据的误更改。因为指针是直接访问内存的,没有拷贝,而有些时候使用指针访问内存时并不是要改变里面的值,而只是要使用里面的值,所以一旦不小心误操作把里面的数据改了就糟糕了。

三.猜你喜欢

  1. C 语言 数组下标越界和内存溢出区别
  2. C 语言 指针声明和定义
  3. C 语言 指针 p++ / p–
  4. C 语言 p++/§++/_(p++)/_p++
  5. C 语言 使用指针遍历数组
  6. C 语言 指针和数组区别
  7. C 语言 指针数组和数组指针区别
  8. C 语言 空指针 NULL
  9. C 语言 void 指针
  10. C 语言 野指针
  11. C 语言 函数值传递和址传递
  12. C 语言 函数缺省参数
  13. C 语言 函数不定长参数
  14. C 语言 函数指针
  15. C 语言 指针函数
  16. C 语言 回调函数 callback
  17. C 语言 typedef
  18. C 语言 define 定义常量
  19. C 语言 define 防止头文件重复包含
  20. C 语言 #pragma once
  21. C 语言 #include <> 与 #include “” 区别
  22. C 语言 const 修饰变量
  23. C 语言 const 修饰指针

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner的预言:通向混合IT之旅

戳蓝字“CSDN云计算”关注我们哦&#xff01;“企业上云之旅是一个非常复杂的旅程&#xff0c;因为它不仅仅只是对基础设施的升级&#xff0c;还是对应用的整个生命周期管理的升级和业务交付模式的升级。”Gartner高级研究总监季新苏在近日举行的媒体见面会上表示。“这个旅程不…

jq之slideDown() stop()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 const 修饰函数返回值 - C语言零基础入门教程

目录 一.const 简介 1.const 修饰变量2.const 修饰指针 二.const 修饰在函数名前面三.const 修饰在函数名后面四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.const 简介 const 是 constant 的缩写&#xff0c;“恒定不变”的意思。被 cons…

OpenStack精华问答 | OpenStack是操作系统?

戳蓝字“CSDN云计算”关注我们哦&#xff01;关于OpenStack的探讨几乎从未间断&#xff0c;从2010年10月份一个版本正式发布至今&#xff0c;OpenStack在8年发展历程中&#xff0c;成为了最有争议的那一个。今天&#xff0c;我们就来看看有关于OpenStack的精华问答吧1Q&#xf…

jq之callback

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 const 修饰函数参数 - C语言零基础入门教程

目录 一.const 简介 1.const 修饰变量2.const 修饰指针3.const 修饰在函数名前面4.const 修饰在函数名后面 二.const 修饰函数参数 1.值传递2.址传递3.const 修饰函数参数 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.const 简介 const …

有问有答 | 精华问题汇总

出品 | CSDN云计算 有问有答&#xff0c;一问一答的形式&#xff0c;帮助大家快速解决更多专业难题。 边缘计算精华问答 | 边缘计算有哪些应用场景&#xff1f; 物联网对物联网技术的快速发展和云服务的推动使得云计算模型已经不能很好的解决现在的问题&#xff0c;于是&…

jq之animate() left font

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 const 和 define 区别 - C语言零基础入门教程

目录 一.const 使用 1.const 修饰变量2.const 修饰指针3.const 修饰在函数名前面4.const 修饰在函数名后面5.const 修饰函数参数 二.define 使用 1.define 定义常量2.define 定义函数3.define 定义多行函数4.define 防止头文件重复包含 三.const 和 define 区别 1.就起作用的阶…

jq之animate()队列

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

云重磅栏目专题汇总

嗨&#xff0c;大家好&#xff0c;头条君带来的【云重磅】特别栏目&#xff0c;会在每周二第一时间为大家带来头条新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我头条君吧&#xff01; 云重磅 | 阿里云开源Blink&#xff1b;华为发布5G Cloud VR&am…

C语言 __STDC__ - C语言零基础入门教程

目录 一.__STDC__简介二.__STDC__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__STDC__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以 “…

C语言 __LINE__ - C语言零基础入门教程

目录 一.__LINE__简介二.__LINE__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__LINE__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以 “…

云漫圈栏目精华汇总

云漫圈&#xff0c;用漫画的形式&#xff0c;帮你轻松掌握云中知识&#xff0c;从此周末不在寂寞。 云漫圈 | 学Python还是Java, 8张漫画带你全面分析 Java和Python两门语言都是目前非常热门的语言&#xff0c;可谓北乔峰南慕容&#xff0c;二者不分上下&#xff0c;棋逢对手…

Rust 生命周期

Rust 第17节 生命周期 先看一段错误代码 /* //一段错误的代码 // Rust 编译时会报错&#xff1b; */let r;{let x 5;r &x;}println!("{}",r);Rust 在编译时使用 借用检查器&#xff0c; 比较作用域来检查所有的借用是否合法&#xff1b; 很明显&#xff1b;r…

jq之animate() toggle

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 __FILE__ - C语言零基础入门教程

目录 一.__FILE__简介二.__FILE__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.**__FILE**__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以…

Kafka精华问答 | kafka的使用场景是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。作为一种高吞吐量的分布式发布订阅消息系统&#xff0c;有着诸多特性。今天&#xff0c;就让我们一起来看看关于它的精华问答吧&#xff01;1Q&a…

jq之animate()操作多个属性

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 __DATE__ - C语言零基础入门教程

目录 一.__DATE__简介二.__DATE__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__DATE__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以 “…