指针复制陷阱

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'.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值