const关键字
const
关键字用于将一个变量声明为只读,“无法被修改”,也就常量.
const int number = 1; //声明number为常量,并初始化赋值
//下方error操作
number = 2; //放在赋值符号左侧 就会报错
在C语言中const
修饰的变量是只读的,其本质还是变量,所以const
修饰的变量会在内存占用空间。
本质上const
只对编译器有用,在运行时无用
const int i = 0;
int* p = (int*)&i;
printf("%d", i); //输出0
*p = 10;
printf("%d", i); //输出10
通过指针在内存里还是可以修改的,但是会警告
const修饰数组
在C语言中const
修饰的数组是只读的,是对数组里数据的保护,如果修改一个被const
修饰的数组时,编译会报错。
const
修饰的数组空间“不可被改变”
const int a[5] = {1,2,3,4,5};
a[0] = 10; //error 放在赋值符号左侧 就会报错
但通过指针还是可以改变
const int a[5] = {1,2,3,4,5};
int* p = (int*)a;
*p = 6; //oops!!
for(int i=0;i<5;i++)
{
printf("%d ",a); //输出6 2 3 4 5
}
指针的强大与易错
const修饰指针
const
声明指针变量时,const
的位置会导致这个指针常量有不同的含义。
const int* p //p可变,p指向的内容不可变
int const* p //p可变,p指向的内容不可变
int* const p //p不可变,p指向的内容可变
const int* const p //p和p指向的内容都不可变
当const
出现在号左边时指针指向的数据为常量
当const
出现在后右边时指针本身为常量
const修饰函数的参数和返回值
const
修饰函数参数表示在函数体内不希望改变参数的值
const
修饰函数返回值表示返回值不可改变,多用于返回指针的情形。
const int* func()
{
static int count = 0;
count++;
return &count;
}
int main()
{
int i = 0;
int* p = func(); //warning 返回值是const,付给*p也需要加上const
// const int* p = func();
printf("%d\n",*p);
return 0;
}
当函数体内部想要做修改时,编译器会报错。需要注意的是并不要求传进来的参数是常量,而是编译器这样做保证函数执行过程中对源数据不会修改而已。