C语言中的关键字const、volatile、extern

一、const

1、修饰一般变量
const int a=10;    int const a=10;//两种方式是相同的

const修饰的变量,不可以直接被修改,可以间接修改
直接修改

int main()
{
	const int a = 10;
	a = 20;            //error
	printf("%d", a);
	return 0;
}

间接修改

int main()
{
	const int a = 10;
	int* p = &a;
	*p = 20;
	printf("%d", a);
	return 0;
}

输出结果
请添加图片描述
const的意义:(并不属于硬性要求)

  • 让编译器进行直接修改式检查
  • 告诉其他程序员不要修改该变量
2、修饰数组

和修饰一般变量是一样的

int main()
{
	const int arr[5] = { 1,2,3,4,5, };
	arr[0] = 5;
	arr[1] = 4;
	arr[2] = 3;
	arr[3] = 2;
	arr[4] = 1;
}

请添加图片描述

3、修饰指针变量

const修饰指针的三种情况,指向的变量不可直接被修改,内容不可修改

int main()
{
	int a = 10;
	const int* p = &a;//p指向的变量不可直接被修改
	int const* p = &a;//和上面是一样的
	*p = 100;//error
	p = 100;//true
}

int main()
{
	int a = 10;
	int* const p = &a;//p的内容不可修改,p的指向不可修改
	*p = 100;//true
	p = 100;//error
}
int main()
{
	int a = 10;
	const int* const p = &a;
	*p = 100;//error
	p = 100;//error
	return 0;
}
4、修饰函数的参数
void show(const int* _p)//防止改变a的值
{
	printf("%d", *_p);
}
int main()
{
	int a = 10;
	int* p = &a;
	show(p);
}
5、修饰返回值
const int* gar()
{
	int a = 10;
	return &a;
}
int main()
{
	int* p = gar();//虽然能运行但是会有报警,加上const报警消失,但是*p就不能修改了
	*p = 20;
}

请添加图片描述
一般在内置函数中返回值加上const是没有意义的
一般在内置函数中返回值加上const是没有意义的

二、volatile(易变关键字)

volatile是为了防止编译器优化,让编译器更稳定的读取代码,volatile让每次读取代码都从内存当中读取

三、extern

使变量和函数可以跨文件访问
源文件test.c

#include"test.h"
int main()
{
	printf("%d\n", a);
	show();
}

源文件main.c

#include"test.h"
int a = 10;
void show()
{
	printf("hahaha");
}

头文件test.c

#pragma once
#include<stdio.h>
extern int a;
extern void show();

最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出来。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值