char *p, *q;
p = "xyz";
尽管某些时候我们可以不妨认为,上面的赋值语句使得p的值就是字符串"xyz" ,然而实际情况并不是这样,记住这点尤其重要。实际上,p的值是一个指向由'x','y','z'和'\0'4个字符组成的数组的起始元素的指针。因此,如果我们执行下面的语句:
q = p;
p和q现在是两个指向内存中同一地址的指针。这个赋值语句并没有同时复制内存中的字符。我们可以用图3.1来表示这种情况:
p/q----> | x | y | z | \0|
我们需要记住的是,复制指针并不同时复制指针所指向的数据。
因此,当我们执行完下面的语句之后。
q[1] = 'y';
q所指向的内存现在存储的是字符串'xYz'。因为p和q所指向的是同一块内存,所以p指向的内存中存储的当然也是字符串'xYz'.