【C语言】const修饰的指针(详解)

简介: 【C语言】const修饰的指针(详解)

一、常见关键字const的作用

☃️ 在C语言中,const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。

☃️cosnt修饰的变量被称为常变量,具有常属性,但本质上还是变量。

☃️保护被修饰的东西,防止被意外修改,增强了程序的健壮性。

☃️ 提高了程序的运行效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,使得它成为一个编译期间的常量,没有了存储和读内存操作,使得它的运行效率也很高。


用const定义常变量的方法很简单,通常在定义变量时前加上const即可。

如:

int main()
{
  const int a = 10;
  return 0;
}
int main()
{
  int const a = 10;
  return 0;
}

以上两种修饰方法是等价的。


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


二、 const int * p (int const * p) 与 int * const p的区别

const 放在*号的左边作用一样,故 const int * p 与int const * p 两者等价。

这里就只拿const int * p 与int * const p 进行比较。

int main()
{
  const int num = 10;
  // num = 20;  /当num被const修饰之后,是不能被修改的,所以这里会报错
  int * p = # //但是我把num的地址存放到指针变量p当中时,
  *p = 20; //p指针解引用,找到p指向的内容num,num的值就会被修改为20
  return 0;
}

我们通过const修饰变量时,就是为了防止num不被修改,而以上案例说明了,通过取地址的方式还是修改了num的值,有违背我们的初衷。

如果想num也不能通过指针变量p来修改值,那我们就需要用const 修饰 int * p,即const int * p.


const 放在*的左边

int main()
{
    int a = 10;
    const int * p = &a;
    /* const 放在*的左边,修饰的是*p,表示的是指针指向的内容,不能通过指针来改变
     但是指针变量本身是可以被修改的*/
    int n = 20;
    *p = n; // 报错  指针指向的内容不能被修改
    p = &n; // 指针变量p可以修改
   return 0;
}

const放在*的右边

int main()
{
    int a = 10;
    int * const p = &a;
     /*const 放在*的右边,修饰的是指针变量p本身,表示指针变量是不可以被修改的
     但是 指针指向的内容可以被修改*/
    int n = 20;
    *p = n; // 指针指向的内容可以修改
    p = &n; //报错 指针变量p不能被修改
  return 0;
}

三、 int const * const p

若*的左边和右边都被加上了const,则*p(指针指向的内容)和p(指针变量本身)均不能被改变。


总结

提示:这里对文章进行总结:


🥇 const int * p(int const * p) :const 放在*的左边,修饰的是*p,*p(指针指向的内容)不能被改变,p(指针变量本身)能被改变。

🥈 int * const p :const 放在*的右边,修饰的是*p,*p(指针指向的内容)能被改变,p(指针变量本身)不能被改变。

🥉 int const * const p (const int * const p),const 放在*的左边,修饰的是*p和p,*p(指针指向的内容)和p(指针变量本身)都不能被改变。


🔅 若本文章对阁下有帮助,还请阁下多多点赞加以支持我哦!


目录
相关文章
|
2月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
124 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
2月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
181 9
|
2月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
64 7
|
3月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
268 13
|
2月前
|
安全 程序员 编译器
【C语言】const 关键字详解
`const`关键字在C语言中用于定义常量,提供只读的变量。这意味着一旦初始化,`const`变量的值不能再被修改。下面详细介绍`const`关键字的用法、作用以及其在不同上下文中的应用。
87 2
|
3月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
3月前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
220 3
|
3月前
|
存储 算法 程序员
C 语言指针详解 —— 内存操控的魔法棒
《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
|
3月前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
72 1
|
3月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。