【C/C++】const char *、char const * 与 char const * 的区别

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_34018840/article/details/89086783

c/c++关于三者的定义方式:

  • const char * ptr
  • char const * ptr
  • char * const ptr

    const关键字本身用于它限定一个变量不允许被改变,产生静态作用。

1、const char * ptr / char const * ptr

      这两种用法的效果相同,都是用于定义一个指向字符常量的指针。ptr在这里指向 char * 类型常量,即 * ptr 所指向的对象为const,简单理解就是不能通过 * ptr 来修改这个对象,但如果这个对象预先被定义(例如下例所示预先被定义为 str[] 数组形式),那么可以通过其原始定义方式来修改这个对象。但是指针 ptr 本身的值是可以修改的。

      测试代码如下:

#include <iostream>

using namespace std;

int main()
{
    int i;
    char str[] = "hello world";
    char sss[] = "goood jobbb";
    char const *ptr = str;
    //const char * ptr = str'; 上下效果一样
    for(i=0; i<11; i++)
        cout << ptr[i];
    cout << endl;

    //ptr[0] = 's'; 报错,提示*ptr为只读对象
    //可通过str[]来修改,但是不能通过*ptr
    str[0] = 'g';
    for(i=0; i<11; i++)
        cout << ptr[i];
    cout << endl;

    ptr = sss;
    for(i=0; i<11; i++)
        cout << ptr[i];
    cout << endl;
}

      运行结果如下:

2、char * const ptr

      定义了一个指向字符的指针常数,即const指针,ptr本身的值不能被修改(即指针存储的地址是固定的),但是其指向的值可以被修改。

      测试代码如下:

#include <iostream>

using namespace std;

int main()
{
    int i;
    char str[] = "hello world";
    char sss[] = "goood jobbb";
    char * const ptr = str;

    for(i=0; i<11; i++)
        cout << ptr[i];
    cout << endl;

    ptr[0] = 's';
    for(i=0; i<11; i++)
        cout << ptr[i];
    cout << endl;

    //ptr = sss;  报错,提示ptr为只读对象
}

      运行结果如下:

猜你喜欢

转载自blog.csdn.net/qq_34018840/article/details/89086783