您的位置:首页 > 编程语言 > C语言/C++

c/c++ const 的用法

2013-10-22 17:31 218 查看
#include <stdio.h>

int main()
{
/*
const int* a;
int const *a;
这种修饰方式为常量指针
只能修改指针a的指向,不能修改a指向的内容
传过来的这个变量为一个常量,你可以指我,用我,但是你不能修改我
printf("*****************\n");
int i = 1, j = 2;

const int *p1 = &i;
printf("%d\n",*p1);
p1 = & j;
printf("%d\n",*p1);

//*p1 = 10;*/

/*
int * const a;
这种修饰方式为指针常量
只能修改指针指向的内容,但不能修改指针的指向,
即指针的地址为一个常量,它就指向这个地址空间,不能再被改变了

printf("*****************\n");
int i = 1, j = 2;

int* const p1 = &i;
printf("i = %d\n",i);
*p1 = 10;
printf("*p1 = %d,i = %d\n",*p1,i);

//	p1 = &j;	//错误 不能修改p1的指向*/

/*
const int *const a;
这种方式为指向常量的指针常量
不能修改指针指向的内容,也不能修改指针的指向,需要声明时初始化
就是你既然来了你就别走了,别动我,但是你也不能把我的秘密带走;

printf("*****************\n");
int i = 1, j = 2;

const int* const p1 = &i;
printf("*p1 = %d i = %d\n",&p1,i);

//	*p1 = 2;	//错误,不能修改指向的内容的值
//	p1 = &j;	//不能修改指向*/

int i = 1,j = 2;
const int t = 3;
const int *p = &t;

//	*p = 10; 不能修改指向的内容
//	t = 5;	t为常量
p = &i;	//常量指针可指向非常量或常量
//	int *p1 = &t;	//非常量指针不可以指向常变量

//	int* const  p1 = &t;//指针常量不能指向常变量
printf("*p = %d\n",*p);

/*const修饰函数参数:
1.const 修饰函数参数是,只能修饰输入参数,对于输出参数,会失去输出功能

2.如果输入参数采用指针传递,那么加上const修饰可以防止
意外的改动指针指向的单元的内容,起到保护作用
如:void fun(char* str1,const char* str2);
str可以随意改动,但是当做*str2 = 1的时候就会报错
如果还想保护指针本身,可以这么写(const char *const str)
这样指针的指向不能变动,指向的内容也不能变动

3.对于面向对象编程,参数若为一个类的对象,最好用&
若用void fun(A a)这样注定效率比较低,因为函数体内要做拷贝,建立
临时对象,就要调用构造,拷贝,析构,都要消耗时间.
当用&的时,引用传递紧借用参数的别名(本质上市地址传递),不需要产生
临时对象,但是函数void fun(A& a)存在一个缺点,那就是函数体内可以修改a。
这在很多情况是我们不期望的,觉得问题就是加上const修饰符就行了
void fun(const A& a)
*/
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: