【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如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指

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

目录
相关文章
|
8月前
|
存储 安全 编译器
『C语言进阶』const详解
『C语言进阶』const详解
|
1月前
|
安全 程序员 编译器
【C语言】const 关键字详解
`const`关键字在C语言中用于定义常量,提供只读的变量。这意味着一旦初始化,`const`变量的值不能再被修改。下面详细介绍`const`关键字的用法、作用以及其在不同上下文中的应用。
44 2
|
7月前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
40 1
|
8月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
32 1
|
7月前
|
存储 C语言
C语言数组指针和指针数组的区别及使用方法
C语言数组指针和指针数组的区别及使用方法
113 0
|
8月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
66 2
|
8月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(中)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
36 0
|
8月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(上)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
31 0
|
8月前
|
存储 C语言
【C语言】const修饰指针的不同作用
【C语言】const修饰指针的不同作用
57 0
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
67 10