const char * 、 char const * 和 char * const

来源:互联网 发布:淘宝卖家让我售后 编辑:程序博客网 时间:2024/05/21 06:44

结论

const char*值不可变,指针可变;

char const* 同上;

char* const指针不可变,值可变;

注:值不可变指的是不能通过指针修改指向的值,如:

*pa = 'a';pb[1] = 'a';

但是值本身依然可变,如:

buf[1] = 'h';

原因

const修饰的是它后面的东西,因此三种形式const修饰的分别是

const char* pa修饰*pa(*pa是值,因此值不可变,指针可变);

char const* pa 同上;

char* const pa修饰pa(pa是指针,因此指针不可变,值可变);

例子

#include<iostream>using namespace std;int main(){    char buf[] = "ha";    char buf2[] = "ha";    const char* pa = buf;    char const* pb = buf;    char* const pc = buf;    //*pa = 'a';// 不能通过指针修改指向的值    //pb[1] = 'a';// 不能通过指针修改指向的值    *pc = 'a';    buf[1] = 'h';    pa = buf2;    pb = buf2;    //pc = buf2;// 不能修改指针的指向(地址)    cout << "pa is " << pa << endl;    cout << "pb is " << pb << endl;    cout << "pc is " << pc << endl;    return 0;}

输出

pa is hapb is hapc is ah

如果把注释去掉,会发生如下错误:

1>e:\program\test\test\源.cpp(10): error C3892: “pa”: 不能给常量赋值1>e:\program\test\test\源.cpp(11): error C3892: “pb”: 不能给常量赋值1>e:\program\test\test\源.cpp(15): error C3892: “pc”: 不能给常量赋值

总结

const char *char const* 效果一样,指针指向地址可变,值不可变,即不能通过指针修改对应的值;

char * const则是不允许修改指针自身,即不能再指向其他地方,但是可以通过指针修改对应的值,即指针为常量;

这三者在实际应用中容易混淆,建议不要使用。

1 0
原创粉丝点击