c/c++ const 的用法

来源:互联网 发布:ubuntu登陆循环nvidia 编辑:程序博客网 时间:2024/05/16 12:58
#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;}

原创粉丝点击