下载此文档

详解sizeof.doc


文档分类:研究生考试 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
详解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的问题,并且本人对这个问题也一直没有得到很好的解决,索

详解sizeof 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人350678539
  • 文件大小41 KB
  • 时间2018-07-19