有些时候有些问题,很容易让人迷惑。尤其是在c/c++中,更容易让人误解。看一下,这两个题:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[] = "abcdefg";
char *b = "abcdefg";
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
cout << strlen(b) << endl;
cout << sizeof(char *) << endl;
return 0;
}
|
对于a的长度,我们很容易确定,就是"abcdefg\0"的长度,而对于b的长度许多人也容易误解为8,但是其实在c/c++中,通常通过sizeof是无法获得一个指针的长度的。程序的输出结果是:
8
4
7
4
也就是说第一个是字符串加是'\0'的长度,对于求sizeof(b)和求sizeof(char *)的结果是一致的。在32位机器g++下面,答案是一致的,都是4,如果要求得字符串数组或指针的长度的话,我们要用标准的strlen()来进行。这就类似于这样一个例子:
int a = 5;
cout << sizeof(a) << endl;
他们在32的机器下面结果是4,其结果相当于sizeof(int),所以说,sizeof可用,而不可乱用。
一篇不错的文章:http://www.cnblogs.com/itech/archive/2009/02/22/1395491.html,推荐去看一下。
阅读(1281) | 评论(0) | 转发(0) |