Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8700161
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类: C/C++

2009-02-23 11:05:28

有些时候有些问题,很容易让人迷惑。尤其是在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,推荐去看一下。
阅读(1286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~