c和指针(2)

 char* a与char a[]的区别,const char* a与char* const a的区别

#include<iostream>
using namespace std;

void main(void)
{
    // char* a 与 char a[] 的区别
    char* a = "abcdef";        // a为一指针,其值可以改变。现在a指向的是一常量字符串
    cout << a << endl;
    a = "ghijkl";              // a现在指向另一常量字符串
    //a[0] = 'z';              // a指向的为常量,编译没问题,但运行出现异常
    cout << a << endl;
    cout << sizeof(a) << endl; // 4

    char b[] = "abcdef";       // b为数组首地址,为一常量,其值不可改变。所指内容不是常量字符串
    cout << b << endl;
    //b = "ghijkl";            // 编译无法通过,b为常量,无法为其指定其它值
    b[0] = 'z';
    cout << b << endl;
    cout << sizeof(b) << endl; // 7

    // ------------------------------------------------------------------------------

    // const char* a 与 char* const a 区别
    char c[] = "abcd";
    char d[] = "efgh";
    const char* pC = c;
    //pC[0] = 'z';             // 编译出错,pC为指向常量的指针,做不能修改指针指向的内容
    cout << pC << endl;
    pC = d;
    cout << pC << endl;        // pC指向的内容不能改,但可以修改指向

    char e[] = "abcd";
    char f[] = "efgh";
    char* const pE = e;
    //pE = f;                  // pE为常量指针,不能改变其指向
    pE[0] = 'z';               // pE为常量指针,虽然不能改变其指向,但可以修改指向内容
    cout << pE << endl;

}

// 总结:(1) char* a这种形式:a为指针,可以改变其指向,
//       其所指向的字符串为常量,不能修改其指向的内容。
//      (2) char a[]这种形式,a为数组名,为常量,不能再
//       指向其它字符串,但其指向的内容不是常量字符串,
//       故可以改变。

//       (1) const char* a 为指向常量的指针,所指内容为常量,
//       不能修改,但可以改变其指向,这种形式还与
//       char const * a等价。
//       (2) char* const a 为指针常量,不能改变其指向,但可
//       以修改其指向的内容。
//       (3) const char* const a 为指向常量的常指针,即不能
//       改变其指向,也不能改变其指向的内容

 

posted @ 2015-12-13 11:03  剑风云  阅读(111)  评论(0编辑  收藏  举报