关于char 数组

来源:百度知道 编辑:UC知道 时间:2024/05/31 19:58:52
#include <string>
#include <iostream>
using namespace std;
main()
{
char var1[100] = "123456788";
char p[] = "Helloworldhere";
strcpy(p,var1);
cout<<"var1 N="<<var1<<endl;
for(int i=0;i<50;i++)
{
cout<<"p["<<i<<"] N="<<*(p+i)<<endl;
}
return 0;
}
结果怎么会有二次
var1 N=123456788
p[0] N=1
p[1] N=2
p[2] N=3
p[3] N=4
p[4] N=5
p[5] N=6
p[6] N=7
p[7] N=8
p[8] N=8
p[9] N=
p[10] N=h
p[11] N=e
p[12] N=r
p[13] N=e
p[14] N=
p[15] N=
p[16] N=1
p[17] N=2
p[18] N=3
p[19] N=4
p[20] N=5
p[21] N=6
p[22] N=7
p[23] N=8
p[24] N=8
p[25] N=
p[26] N=
........
p[49] N=

因为计算机在存储时,刚好将p[]之后的第二个地址单元分给了var1[100]的首地址。
举个例子
假如p[]的首地址是2000,那么p[]= "Helloworldhere"最后一个字符"e"的地址为2013,每个字符串后都有一个"/n",也就是说"/n"占用地址为2014,计算机正好又将var1[100]的首地址分为2016,由此可知,用指针调用地址取值时会输出以上结果。

因为在字符串存储时,最后一位是空,所以char var1[100] = "123456788"; 中是10个位,调用strcpy(p,var1);方法, 则"123456788"; 将p[]中的前十位“Helloworld”覆盖了,所以就输出以上结果。p[9] N=
就是输出的空字符!