1.const修饰变量
当我们有个变量不想被修改应该如何
#include <stdio.h>
int main()
{
int m = 0;
m = 20;//m是可以修改的
const int n = 0;
n = 20;//n是不能被修改的
return 0;
}
在上述代码中n本生是不能修改的,其实n本身就是变量,所以就算在代码中修改了,结果就只能报错。
但是,凡事都有例外。当我们破语法规则直接改变n的地址也是可以修改成功的。
#include <stdio.h>
int main()
{
const int n = 0;
printf("n = %d\n", n);
int*p = &n;
*p = 20;
printf("n = %d\n", n);
return 0;
}
2.const修饰指针变量
对于下面四种修饰有何观点
2.1第一种没有const修饰的
//第一种没有修饰的
void test1()
{
int n = 10;
int m = 20;
int *p = &n;
*p = 20;//ok?
p = &m; //ok?
}
请自己尝试一下,是否都可以。
2.2测试const放在*的左边情况
代码2 - 测试const放在*的左边情况
void test2()
{
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//ok?
p = &m; //ok?
}
const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。
也就是说不可以将20付给n,但是本身可以改变。
2.3 测试const放在*的右边情况
//代码3 - 测试const放在*的右边情况
void test3()
{
int n = 10;
int m = 20;
int * const p = &n;
*p = 20; //ok?
p = &m; //ok?
}
const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。
2.4 测试*的左右两边都有const
//代码4 - 测试*的左右两边都有const
void test4()
{
int n = 10;
int m = 20;
int const * const p = &n;
*p = 20; //ok?
p = &m; //ok?
}
当两边都有时,会发生错误,且两个都不行.