const作用:防止定义的变量被修改
1、用于修饰变量
const int a=10;//合法
int const b=10;/合法,等价const int =10;
const int c;//非法
int const d;//非法
注意:必须有初始值
2、用于修饰指针
const修饰的*sp,所以sp指针指向的地址可以改变,但是*sp执行的内容不可改变
第一:const int *sp//指针可变,指向内容不可变
int const *sp//指针可变,指向内容不可变
int temp=10;
int temp2=70;
const int *sp=&temp;//
sp=&temp2;//合法,修改指针
*sp=300;//非法,如果定义指针用int *sp=&temp;方式则合法
const修饰的*sp,所以sp指针指向的地址可以改变,但是*sp执行的内容不可改变
第二种:int *const sp//指针不可变,指向的内容可变
例如:
int temp=10;
int temp2=70;
int *const sp=&temp;
// sp=&temp2;//不合法,指针不可变,指向内容可以改变
*sp=300;//合法,
printf("*p=%d",temp);//结果为300
第四种:
const int *const sp//sonst即指针不可变、指向的变量也不可改变
3、修饰函数形参
void func(const int &num)//防止按地址传入的原始数据被修改
{
num=100;//错误,不能修改
}
补充:既然怕修改为啥不直接使用按变量方式传递
答:按变量的方式传递浪费内存和时间,效率不高,失去了按地址传递的意义
4、修饰函数返回值
例如:const int func();
则接受的值也需要使用const 限定
const int a=func();//正确
int a=func();//错误
5. 可以避免不必要的内存分配
#define STRING "abcdefghijklmn\n"
const char string[]="abcdefghijklm\n";
...
printf(STRING); //为STRING分配了第一次内存
printf(string); //为string一次分配了内存,以后不再分配
...
printf(STRING); //为STRING分配了第二次内存
printf(string);
...
由于const定义常量从汇编的角度来看,只是给出了对应的内存地址,
而不是象#define一样给出的是立即数,所以,const定义的常量在
程序运行过程中只有一份拷贝,而#define定义的常量在内存中有
若干个拷贝。
1、用于修饰变量
const int a=10;//合法
int const b=10;/合法,等价const int =10;
const int c;//非法
int const d;//非法
注意:必须有初始值
2、用于修饰指针
const修饰的*sp,所以sp指针指向的地址可以改变,但是*sp执行的内容不可改变
第一:const int *sp//指针可变,指向内容不可变
int const *sp//指针可变,指向内容不可变
int temp=10;
int temp2=70;
const int *sp=&temp;//
sp=&temp2;//合法,修改指针
*sp=300;//非法,如果定义指针用int *sp=&temp;方式则合法
const修饰的*sp,所以sp指针指向的地址可以改变,但是*sp执行的内容不可改变
第二种:int *const sp//指针不可变,指向的内容可变
例如:
int temp=10;
int temp2=70;
int *const sp=&temp;
// sp=&temp2;//不合法,指针不可变,指向内容可以改变
*sp=300;//合法,
printf("*p=%d",temp);//结果为300
第四种:
const int *const sp//sonst即指针不可变、指向的变量也不可改变
3、修饰函数形参
void func(const int &num)//防止按地址传入的原始数据被修改
{
num=100;//错误,不能修改
}
补充:既然怕修改为啥不直接使用按变量方式传递
答:按变量的方式传递浪费内存和时间,效率不高,失去了按地址传递的意义
4、修饰函数返回值
例如:const int func();
则接受的值也需要使用const 限定
const int a=func();//正确
int a=func();//错误
5. 可以避免不必要的内存分配
#define STRING "abcdefghijklmn\n"
const char string[]="abcdefghijklm\n";
...
printf(STRING); //为STRING分配了第一次内存
printf(string); //为string一次分配了内存,以后不再分配
...
printf(STRING); //为STRING分配了第二次内存
printf(string);
...
由于const定义常量从汇编的角度来看,只是给出了对应的内存地址,
而不是象#define一样给出的是立即数,所以,const定义的常量在
程序运行过程中只有一份拷贝,而#define定义的常量在内存中有
若干个拷贝。