c语言关键字(5)

102 阅读1分钟

const关键字

  • const 修饰的变量不能直接被修改
    
    const int a = 10;
    a = 20// 不能直接修改
    
    
  • 可以间接修改
  • 通过指针的方式
const int a = 10;
int *p = (int*)&a;

*p = 20;

// 可以修改
  • const 修饰变量的意义在哪里?
    • 让编译器进行直接修改检查
    • 告诉其他程序员这个变量后面不要改,也是一种“自描述”含义。
  • 在编译期间保护代码不被修改,给编译器去看的。
int a = 10;
int *p = &a;

// a:int:4byte:4个地址:&a?:最低地址的那个!!
// 在c中任何变量&都是最低地址开始,考虑字节序列来看
  • (类型相同的情况下)对指针进行解引用,指针所指向的目标。

const修饰指针

int a = 10;
const int *p = &a;
*p = 100;// p指向的变量不能直接修改
p = 100;

int const *p = &a;
*p = 100;
p = 100;

int *const p = &a;// p的内容不可直接被修改,p指向不能改
*p = 100; // 指向 a 它可以修改
p = 100;

const int * const p = &a;
// p的指向不能改,要一直直指向a
// p的变量不能改
*p = 100;
p = 100;

  • 函数返回值进行const修饰,让编译器知道不能修改
  • 一般内置类型返回,加const无意义。
const int* val()
{
	static int a = 10;
	return &a;
}
 
int main()
{
	const int* i = val();

	return 0;
}

小总结:

  • const 一个是给编译器看,一个是给程序员看,不会进行强约束,修饰变量 指针 数组 函数 函数返回值。
  • volatile