C语言const的用法

const:定义常变量,不能写,只读。

const还有下面三点需要注意的地方:

一、数据类型对于const而言是透明的

#include <stdio.h>

int main()
{
	const int a = 10;
	int const b = 20;

	//a = 100;//error
	//b = 200;//error


        printf("%d\n",a);
        printf("%d\n",b);

	return 0;
}

上面a和b都不能被重新赋值,但是a和b都可以被读取。

且在定义的时候需要初始化,否则写权限被封锁,此常变量为随机数。

二、const用于封锁直接修饰的内容,将该内容变为只读

具体表现可由下面的源代码演示:

#include <stdio.h>

int main()
{
	int a = 10;
	int b = 20;
	int *p = &a;
	*p = 200;

	const int *cp1 = &a;//可理解为封锁了*cp1的写权限
	cp1 = &b;//ok
	//*cp1 = 200;//error

	int const *cp2 = &a;//cp2等价cp1
	cp2 = &b;
	//*cp2 = 200;//error

	int *const cp3 = &a;//可理解为封锁了cp3的写权限
	//cp3 = &b;//error
	*cp3 = 200;//ok

	int const *const ccp = &a;//都被封锁
	//ccp = &b;//error
	//*ccp = 100;//error

	return 0;
}

三、权限只能同等传递或者缩小传递

具体表现可由下面源代码演示:

#include <stdio.h>

int main()
{
	int a = 10;//读,写
	int b = 20;//读,写
	const int ca = 10;//读
	const int cb = 20;//读

	int *p = &a;//ok
	//p = &ca;//error//将权限扩大

	const int *cp1 = &a;//const直接修饰*cp1,使其不能作为左值,所以cp不能解引用,但可以改变cp1所指向的地址
	cp1 = &b;//权限缩小
	cp1 = &ca;//ok
	const int *cp2 = &ca;//ok

	int *const cp3 = &a;//cp3不能解引用
	//int *const cp4 = &ca;//error//ca只能读,如果访问cp4则能赋值,出现错误

        const int *const cp5 = &a;//将权限缩小
	const int *const cp6 = &ca;//将权限缩小

	return 0;
}

猜你喜欢

转载自blog.csdn.net/hdong99/article/details/79855586