注册 登录
编程论坛 C++教室

CHAR*问题

terisevend 发布于 2007-08-09 21:21, 478 次点击
先来看看下面的一段程序:

#include <iostream>

int main( )
{
char* a = "ABCDEF";
cout << a << " " << &a << endl;
a++;
cout << a << " " << &a << endl;
return 0;
}

输出结果:
ABCDEF 地址1
BCDEF 地址1

问题: 从输出结果可以看出, a的地址没变, 但是输出的a的数据, 却改变了(从ABCDEF->BCDEF).
这是为什么呢
?(问题1) 系统中, ++对于处理char类型的数据, 难道是把字符串的首位字符
由N变成N+1? 如果是这样的, 也就是说, 系统对原有数据进行了复制与覆盖. 如果是这样的话,
那么当使用a--时, 所输出的数据是无法估计的. 但是事实证明, 使用a--, 将会原样输出
ABCDEF. 如果说, 系统在复制与覆盖的时候, 使用另一变量来存放原来的数据. 但是, 如
过是这样的话, 那么系统岂不是向内存申请了2个存放空间
?(问题2)
还有1个问题, 就是sizeof(char)=1, sizeof(char*)=4, 但是"ABCDEF"不可能只用那char
所申请的空间存放, 而且事实标明, *a = "A" , *a != "ABCDEF". 那么ABCDEF是存放在
哪里的呢
?(问题3)

望大家踊跃帮小弟解决这个问题
3 回复
#2
maoguoqing2007-08-09 23:09

a的地址怎么会会变?

a的类型是一个指针,它同样有一块内存来存储它

a++只是a指向的地址加,有点像是a的值加了,值加了地址怎么会变呢?

如果还是没明白,我举个例子。你把指针类型的a就看成整数类型的i,也就是

int i = 10;

cout<<i<<&i;

i++;

cout<<i<<&i;

你会看到,输出值变成了11,但是i自己的地址怎么会变呢。

#3
野比2007-08-10 13:35
这样的...
祭出ASCII大法...

*----* *-------*
|指针|-------->|ABCDE |
*----* *-------*
地址1 另外的地址...


所以指针的地址不会变...变的是那根针...(就是存在地址1里面的内容)
#4
terisevend2007-08-11 01:32

谢啦~现在大概明白了~

1