【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(指针变量本身)都不能被改变。


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


目录
相关文章
|
23小时前
|
安全 C语言
【C语言】如何规避野指针
【C语言】如何规避野指针
21 0
|
23小时前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
22小时前
|
C语言
c语言指针总结
c语言指针总结
15 1
|
22小时前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
3 0
|
22小时前
|
存储 C语言
C语言指针讲解(适用于初学者)
C语言指针讲解(适用于初学者)
6 0
|
23小时前
|
存储 程序员 C语言
【C 言专栏】C 语言指针的深度解析
【4月更文挑战第30天】C 语言中的指针是程序设计的关键,它如同一把钥匙,提供直接内存操作的途径。指针是存储其他变量地址的变量,通过声明如`int *ptr`来使用。它们在动态内存分配、函数参数传递及数组操作中发挥重要作用。然而,误用指针可能导致错误,如空指针引用和内存泄漏。理解指针的运算、与数组和函数的关系,以及在结构体中的应用,是成为熟练 C 语言程序员的必经之路。虽然挑战重重,但掌握指针将增强编程效率和灵活性。不断实践和学习,我们将驾驭指针,探索更广阔的编程世界。
|
23小时前
|
算法 搜索推荐 程序员
C语言中的函数指针和回调函数
C语言中的函数指针和回调函数
11 2
|
23小时前
|
存储 编译器 C语言
【C语言】初步解决指针疑惑
【C语言】初步解决指针疑惑
7 0
|
23小时前
|
存储 C语言
指针深入解析(C语言基础)带你走进指针,了解指针
指针深入解析(C语言基础)带你走进指针,了解指针
|
23小时前
|
C语言 C++
C语言:指针运算笔试题解析(包括令人费解的指针题目)
C语言:指针运算笔试题解析(包括令人费解的指针题目)

热门文章

最新文章