const使用及意义-----const int* p和int* const p

这个字符串copy函数中,把src指向的字符串复制到dest中,也就是src的值是不需要改变的,而dest指针指向的值改变。对*src加上const后就可以防止其中的值被修改,起到保护作用。在实参中,指针会指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个临时指针变量的地址与实参的地址不同,但却指向同一块空间地址。如果用const修饰返回值类型为指针,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。即不存在引用的引用,但可以有指针的指针。

1.修饰变量

const int* p


int n=10;
int m=20;
const int* p=&m;
//此时const修饰 *p,也就是p保存的地址里面的值不能改变,若*p=60,则会报错
但是可以改变p存放的地址:
p=&n;
printf("%d",*p);//打印结果是10

int* const p

int n=10;
int m=20;
int* const p=&n;
//此时const只修饰p,也就是p的值只能为&n,无法修改,若p=&m 会报错
但是可以改变*p的值:
*p=60;
//虽然p存放的&n无法修改,但是*p得到的n的值可以修改为60
printf("*p=%d,n=",*p,n);//打印结果为60,60

2.修饰函数

修饰函数的形参

void StringCopy(char* dest, const char* src);

这个字符串 copy 函数中,把 src 指向的字符串复制到 dest 中,也就是 src 的值是不需要改变的,而 dest 指针指向的值改变。对*src 加上 const 后就可以防止其中的值被修改,起到保护作用。

而起到保护作呕也能够的原因是:

在实参中,指针会指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个临时指针变量的地址与实参的地址不同,但却指向同一块空间地址。那么**形参加上 const 修饰之后,保护了这一块内存地址不被修改,如果刻意修改这一块内存,编译器会报错。当然,如果使用 c++中的引用,效率会比指针更高,因为引用本身是一个变量,而这个变量仅仅是另外一个变量的别名,它不是指针,不占用内存空间,不会产生临时指针变量,并且不存在 NULL 空引用,无需 assert,比指针更安全。**同时,理论上指针的级数没有限制;但引用只有一级。

即不存在引用的引用,但可以有指针的指针。

修饰函数的返回值

如果用 const 修饰返回值类型为指针,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加 const 修饰的同类型指针。

const char * GetString(void);
//const修饰的函数返回值类型是char*

那么:

char *str = GetString();//报错,没有const修饰

const char *str = GetString();//正确
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计