|
|
发表于 2006-3-26 16:04:25
|
显示全部楼层
Post by mousse
在索引里面看到这么一个帖子,打印:
- 打印相同的字符的结果不一样。
- printf( "%d\n", sizeof( "" ) );
- 这里的结果是1
- printf( "%d\n", strlen( "" ) );
- 这里的结果是0
复制代码
说sizeof("")的大小是1,而sizeof(char*)是4啊,这个是不是char[]和char*的区别,还是别的什么?
是的,char[] 和 char* 是不一样的,对于 “”之类的,编译器一般解析为数组,看如下的例子:
- [rick@Fedora-Core ~]$ cat test.cc
- #include <typeinfo>
- #include <iostream>
- using namespace std;
- int main()
- {
- char arr[1];
- char* p;
- cout<<typeid("").name()<<endl;
- cout<<typeid(arr).name()<<endl;
- cout<<typeid(p).name()<<endl;
- return 0;
- }
- [rick@Fedora-Core ~]$ g++ test.cc
- [rick@Fedora-Core ~]$ ./a.out
- A1_c
- A1_c
- Pc
复制代码
现在有的c++已经支持声明大小为0的数组了(int a[0];),不知道sizeof(a)是不是也是1。
这个自然应该是0吧,你写的是0,还想让他不是0啊?
还有一些类似的问题:
struct node{};
sizeof(node) 为 1
这个是1可以理解,一个结构总要有空间,给多少呢?既然他没成员,就给个最小的给他好了,那就是1了 |
|