详解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 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如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指
向的内容,可以通过指针改变。

相关推荐

  1. C 语言 const 关键字详解

    2024-02-15 12:30:02       49 阅读
  2. C/C++关键字详解-----`const`使用

    2024-02-15 12:30:02       46 阅读
  3. C++const关键字详解

    2024-02-15 12:30:02       52 阅读
  4. C++ const 关键字详解

    2024-02-15 12:30:02       32 阅读
  5. C语言——const函数

    2024-02-15 12:30:02       56 阅读
  6. C语言——const

    2024-02-15 12:30:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-15 12:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-15 12:30:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-15 12:30:02       82 阅读
  4. Python语言-面向对象

    2024-02-15 12:30:02       91 阅读

热门阅读

  1. 半导体二极管

    2024-02-15 12:30:02       51 阅读
  2. 优秀网络安全运营专家的成长之路

    2024-02-15 12:30:02       56 阅读
  3. Raspbian简易RTSP服务

    2024-02-15 12:30:02       48 阅读
  4. 十三、枚举

    2024-02-15 12:30:02       42 阅读
  5. Android 12.0 Camera 分辨率从高到低排列功能实现

    2024-02-15 12:30:02       44 阅读
  6. 力扣-345. 反转字符串中的元音字母

    2024-02-15 12:30:02       52 阅读
  7. django中配置使用websocket

    2024-02-15 12:30:02       45 阅读
  8. TiDB分布式关系型数据库简介

    2024-02-15 12:30:02       48 阅读
  9. 力扣-125. 验证回文串

    2024-02-15 12:30:02       53 阅读