1 / 6
文档名称:

详解sizeof.doc

格式:doc   大小:41KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

详解sizeof.doc

上传人:350678539 2018/7/19 文件大小:41 KB

下载得到文件列表

详解sizeof.doc

文档介绍

文档介绍:详解sizeof
深圳软件部林晓翰
要注意strlen和sizeof的区别。
sizeof的用法可以是sizeof(变量)或sizeof(类型)。注意sizeof是运算符,运算符意味着“神圣不可侵犯”,因为它紧密地关系到了内存的分配等等底层事务的合法运作。sizeof作为一个运算符,即使在C++中,仍然是神圣不可侵犯的。
而strlen是库函数。
代码:
main()
{
char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’};
int i,j;
i=sizeof(a);
j=strlen(a);
printf(“%d,%d\n”, i,j);
}
输出结果是
9,8
代码:
#include ""
#include ""
main()
{
int len1,len2,len3,len4,len5,len6,len7;
char *pStr="123456789";
char tStr[10]="123456789";
char cStr[]="123456789";
len1=strlen(pStr);
len2=sizeof(pStr);
len3=strlen(tStr);
len4=sizeof(tStr);
len5=strlen(cStr);
len6=sizeof(cStr);
len7=sizeof(unsigned long);
printf("%d,%d,%d,%d,%d,%d,%d",len1,len2,len3,len4,len5,len6,len7);
}
打印结果是:9,4,9,10,9,10,4
如果对指针取sizeof,得到这个指针所占的内存大小,对于32位CPU,都是4。经验证,在VC下对任何指针取sizeof,结果果然都是4。
对数组取sizeof,得到的是整个数组所占的内存大小。所以,数组和指针在这里是不同的,一般情况下对指针做sizeof操作总是返回CPU位长/8。这是指针和数组的为数不多的区别之一。
代码:
int main()
{
const char * str = "abcdefg";
char str_stack[] = "abcdefg";
}
上面代码中,str的类型是一个char *,也就是一个“指向char类型内存的指针”,因此在32位平台,sizeof(str)应该是4。而str_stack的类型是char[8] ——这里,它的整个字符串都在栈上,而不是在字符串池或者全局、静态、堆之类的任何地方。因此我们sizeof(str_stack)就是在sizeof(char [8]),得到的自然是8。
C标准规定sizeof 运算符的返回值为size_t 类型(某个无符号整型),这一类型在标准头文件<>里定义。同时在那里定义的还有ptrdiff_t 类型,它是指针减运算的结果类型。
另外,不能对NULL做strlen。
深入理解sizeof
作者:房秉毅
最近在论坛里总有人问关于sizeof的问题,并且本人对这个问题也一直没有得到很好的解决,索