注册 登录
编程论坛 C++教室

关于sizeof();

gmac 发布于 2011-03-02 22:29, 855 次点击
程序代码:
#include <iostream>
using namespace std;
int main()
{
    char *words[] = {"abcd","abcde","sbuck","sdfsf"};
    size_t words_size = sizeof(words)/sizeof(char*);
    cout<< words_size <<" "<< sizeof(words) <<" " << sizeof(char*);//求解释
    system("pause");
    return 0;
}
在C++PRIMER中看到的,求sizeof(words)和sizeof(char*)的解释。。。。
自己查了查,明白了。
char *words[] 为指针数组;
sizeof(words)求的是指针数组的大小也就是四个字符指针的大小 为4x4=16;
sizeof(char*)求的是字符指针的大小;

[ 本帖最后由 gmac 于 2011-3-3 10:27 编辑 ]
11 回复
#2
pangding2011-03-02 23:01
书上没解释吗?
#3
qq10235692232011-03-03 07:44
sizeof(words); //求指针数组words的长度,就是4
sizeof(char*); //求字符类型指针占用的存储空间
#4
gmac2011-03-03 10:03
回复 3楼 qq1023569223
好像不是啊!!
#5
gmac2011-03-03 10:03
回复 2楼 pangding
没有啊
#6
homelove2011-03-03 16:29
sizeof有两种参数:
1.sizeof(类型名):返回该类型在内存中所分配的字节数,比如sizeof(char)=1,sizeof(int)=4,sizeof(char*)=4(这些结果都是在我的机器测试出来的,不同的机器可能有不同的值)。
2.sizeof(变量):返回该存储变量所需要的内存字节数,比如:
  char c='z';
  cout<<sizeof(c)<<endl; // 打印1
  char s[]="abcd"; 被编译器解释为以0结尾的字符串,占5个字节
  cout<<sizeof(s)<<endl; // 返回数组在内存中的字节数 ,打印5。
所以,楼主代码中sizeof(words),返回的是数组words在内存中的字节数,而sizeof(char*)返回的是字符指针所占的字节数,因为words是char*类型的,所以sizeof(words)/sizeof(char*)则返回的是数组words的元素总数4。
#7
qq10235692232011-03-03 16:31
哦,学习了!
#8
pangding2011-03-03 17:27
就是 6楼 说的。不过我觉得 C++ Prime 上既然提到了 sizeof 又没讲清楚,好像不太可能吧~
#9
huang12288972011-03-03 17:37
总之就是sizeof后括号里的所占字节。
#10
huang12288972011-03-03 17:38
把各个类型的搞清楚了就不用纠结sizeoof了
#11
pangding2011-03-03 18:41
回复 10楼 huang1228897
sizeof 经常用于书写,对可移植有要求的代码。做为一个习惯,任何需要使用变量类型大小的地方应该全部都用 sizeof。
#12
succubus2011-03-08 16:09
siseof 操作符的作用是返回一个对象或类型名的字节长度它有以下三种形式
sizeof (type name );
sizeof ( object );
sizeof object;
返回值的类型是size_t 这是一种与机器相关的typedef 定义我们可以在cstddef 头文
件中找到它的定义下面的例子使用了sizeof 的两种格式
#include <cstddef>
int ia[] = { 0, 1, 2 };
// sizeof 返回整个数组的大小
size_t array_size = sizeof ia;
// sizeof 返回int 类型的大小
size_t element_size = array_size / sizeof( int );
当sizeof 操作符应用在数组上时例如上面例子中的ia 它返回整个数组的字节长度
而不是第一个元素的长度也不是ia 包含的元素的个数例如在一台int 类型是4 个字节
长的机器上sizeof 指示ia 的长度是12 字节类似地当我们写如下代码时
int *pi = new int[ 3 ];
size_t pointer_size = sizeof ( pi );
sizeof(pi)返回的值是指向int 型的指针的字节长度而不是pi 指向的数组的长度
以上是C++ Primer 3ed.介绍sizeof的内容
只有本站会员才能查看附件,请 登录

以上为C++ Primer 4ed.介绍sizeof的内容
1