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

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

文章目录

一、const 普通用法

二、常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 )

三、指针常量 ( 指针不能被修改 )

三、指向 常量 的 指针常量

四、const 在 * 左右的意义





一、const 普通用法


const 关键字 在 C 和 C++ 中的表现不同 , 本篇博客主要介绍 C 语言中的 const 用法 ;



const 的用法 : 下面的 2 22 个写法作用相同 , const 可以在 数据类型 前面 , 也可以在 数据类型 后面 ;


// 下面两个 const 用法相同
const int a;
int const a;






二、常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 )


下面的 c 是 指向 常量字符 的指针 , const char 表示 常量字符 , const char * 表示 指向 常量字符 的指针 ;


该指针 指向的 内存空间 不能被修改 ,

指针可以被修改 ;

// 指向 常量字符 的指针 
const char *c;


上述代码 指针指向的 内存 是常量 ; 常量指针






三、指针常量 ( 指针不能被修改 )


下面的 d 是 指向 字符 的 常量指针 , char * 表示一个指向 char 字符的指针 , 后面加上 const 表示该指针 是 常量指针 ;


该指针 指向的 内存空间 可以被修改 ,

指针 不能 被修改 ;

char * const d;


上述代码 指针 是常量 ; 指针常量






三、指向 常量 的 指针常量


下面的 c 是 常量指针 指向一个常量 , 指针 和 指针指向的内存 , 都不能被修改 ;


const char * const c;






四、const 在 * 左右的意义


普通的数据类型 , const 在数据类型左右作用相同 ;



指针数据类型 , const 在 * 左侧是 常量指针 ( 内存不能修改 ) , const 在 * 右侧是 指针常量 ( 指针不能被修改 ) ;


指针常量与常量指针 : 需要查看 const 修饰的是 指针变量 , 还是 修饰 指针变量 指向的内存空间 ;


const 在 * 右边 ( 指针常量 | const 修饰的是变量 ) : const 修饰的是 指针变量 , 如 char * const d , const 修饰的是 char * , 指针不能被修改 ; 这是 指针常量 ;

const 在 * 左边 ( 常量指针 | const 修饰的是数据类型 ) : const 修饰的是 指针变量 指向的内存空间 , 如 const char *c , const 修饰的是 char , char 数据不能被修改 , 这是 常量指针 , 指向常量的指针 ;


const 修饰的是右边的内容 ,


右边是 变量 , 相当于 const 在 * 右边 , 指针常量 , 指针不能修改 ;

右边是 数据类型 , 相当于 const 修饰的是 内存中的数据 , 指针指向的内存不能被修改 ;


目录
相关文章
|
11月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
487 2
|
C语言
【C语言】break 关键字详解
- `break` 关键字用于提前退出循环体或 `switch` 语句的执行。 - 在 `for`、`while` 和 `do-while` 循环中,`break` 可以帮助程序在满足特定条件时退出循环。 - 在 `switch` 语句中,`break` 用于终止 `case` 代码块的执行,避免代码“穿透”到下一个 `case`。 - 注意 `break` 只会退出最内层的循环或 `switch` 语句,确保在嵌套结构中正确使用 `break` 以避免意外的控制流行为。
1732 2
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
1029 1
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
838 12
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
461 26
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
574 15
|
存储 人工智能 程序员
一文彻底搞清楚C语言的数据类型和变量
本文介绍了数据类型(基本、构造、指针、空类型)、变量(使用、命名规则、作用域)和常量(字面、符号、枚举、表达式),帮助初学者理解编程基础概念。坚持学习,定能创造奇迹!
2263 1
一文彻底搞清楚C语言的数据类型和变量
|
存储 编译器 程序员
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
在C语言中,内存布局是程序运行时非常重要的概念。内存布局直接影响程序的性能、稳定性和安全性。理解C程序的内存布局,有助于编写更高效和可靠的代码。本文将详细介绍C程序的内存布局,包括代码段、数据段、堆、栈等部分,并提供相关的示例和应用。
988 5
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
|
C语言
【C语言】continue 关键字详解
`continue` 关键字在 C 语言中用于跳过当前循环中的剩余代码,并立即开始下一次迭代。它主要用于控制循环中的流程,使程序在满足特定条件时跳过某些代码。
1866 1
【C语言】continue 关键字详解
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
1029 12