【C语言】:const的使用方法

简介: 【C语言】:const的使用方法

1.const修饰变量

众所周知,变量是可以被修改的,但是如果我们希望给变量加上一些限制,不能被修改,怎么做呢?这就是const的作用。

直接上代码:

#include <stdio.h>
int main()
{
  const int a = 10;
   a = 20;
   return 0;
}

调试结果直接报错:

这是因为当a被const修饰后,在语法上加上了限制,使a具有了常属性(不能被修改了)。但是本质上还是一个变量,不是常量。

但是如果我们绕过a,使用a的地址,去修改a就可以做到。其实这就相当于我们给a关了门,上了锁,在原则上a被限制了,但是有人打破窗户,翻窗进去把a给修改了。

#include <stdio.h>
int main()
{
  const int a = 10;
  printf("修改前:%d\n", a);
  int* p = &a;
   *p = 20;
   printf("修改后:%d\n", a);
   return 0;
}

运行结果是:

可以看见a确实被修改了。这里我们可以思考一下,为什么n要被const修饰呢?就是为了不能被修改,如果p拿到n的地址就能修改n,这样就了const的限制,这是不合理的,所以应该让p拿到n的地址也不能修改n,那接下来怎么做呢?

2.const修饰指针变量

一般来讲const修饰指针变量,可以放在 * 左边,也可以放 * 右边,其意义是完全不同的

1.int* p; //没有const修饰

2. int const * p或const int* p; //放在左边
3. int * const p; //放在
右边

2.1 const放在 * 左边

上代码:

#include <stdio.h>
int main()
{
  int a = 10;
  int b =20;
  int const * p = &a;
  //p = &b;//ok
  *p=200;//err
  return 0;
}

const放在* 左边时,限制的是指针指向的内容,不能通过指针来修改!

但是p本身的内容可变

2.2 const放在 * 右边

上代码:

#include <stdio.h>
int main()
{
  int a = 10;
  int b = 20;
  int* const p = &a;
  p = &b;//err
  return 0;
}

const放在*右边时,限制的直接是p本身,p里面原本存的是a的地址,现在想改b的地址,不行

但是我们可以把p所指向的空间里的内容修改

#include <stdio.h>
int main()
{
  int a = 10;
  printf("修改前:%d\n", a);
  
  int* const p = &a;
  *p=200;
  printf("修改后:%d\n", a);
  return 0;
}

const修饰指针变量时:

1.const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。

但是指针变量本身的内容可变。

2.const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指

向的内容,可以通过指针改变。

目录
相关文章
|
4月前
|
存储 安全 编译器
『C语言进阶』const详解
『C语言进阶』const详解
|
3月前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
27 1
|
4月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
20 1
|
3月前
|
存储 C语言
C语言数组指针和指针数组的区别及使用方法
C语言数组指针和指针数组的区别及使用方法
54 0
|
4月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
30 2
|
4月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(中)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
23 0
|
4月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(上)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
19 0
|
4月前
|
存储 C语言
【C语言】const修饰指针的不同作用
【C语言】const修饰指针的不同作用
37 0
|
4月前
|
编译器 C语言 Python
详解C语言指针的使用方法(下)
详解C语言指针的使用方法(下)
66 0
|
4月前
|
存储 安全 编译器
详解C语言指针的使用方法(上)
详解C语言指针的使用方法(上)
54 0