对字符数组和字符指针有时候会迷糊,弄了个小例子亲自看看运行结果,已经就不会再迷糊了。
NOTE:字符串常量也要占据内存空间。
#include <iostream>
using namespace std;
int main()
{
char *name = "cuihao";
char ch[7] = "cuihao"; //末尾有一个'\0'
int i = 0;
cout<<"sizeof(name)="<<sizeof(name)<<endl; //name看作是一个char* 类型变量
cout<<"sizeof(char*)="<<sizeof(char*)<<endl; //大小同name
cout<<"strlen(name)="<<strlen(name)<<endl; //从开始位置到'\0'位置的字符个数,不包括'\0'
for (i = 0; name[i] != '\0'; i ++)
{
cout<<"name["<<i<<"])="<<name[i]<<" ";
cout<<"sizeof(name["<<i<<"])="<<sizeof(name[i])<<endl;
}
cout<<"sizeof(ch)="<<sizeof(ch)<<endl; //ch不同于name,ch是个数组,除了代表数组首元素地址外还含有内部元素这 // 一层意思,而name仅仅是个地址而已,指向内存中的字符串常量
for (i = 0; ch[i] != '\0'; i ++)
{
cout<<"ch["<<i<<"])="<<ch[i]<<" ";
cout<<"sizeof(ch["<<i<<"])="<<sizeof(ch[i])<<endl;
}
return 0;
}
运行结果:
?
?