SIZEOF函数使用

参考  http://blog.csdn.net/wzy198852/article/details/7246836

1.语法

sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;

2.计算

1)计算求值

  sizeof(2) = sizeof(int);  sizeof(2.22) = sizeof(double)

2)函数求值,得到函数的返回值类型所占字节的大小,不会去执行调用函数

  int func(void);

  sizeof(func) = sizeof(int)

3)数组求值

void FuncArray(char *a)

{

  printf("%d\n", sizeof(a));  /* 4,所有的指针占四个字节 */

}

int main(void)
{

   /* 数组指针 */
  char a[] = "abc";
  printf("%d\n", sizeof(a));   /* 4,包含结束符 ‘\0‘ */
  printf("%d\n", strlen(a));   /* 3,不包含结束符*/

  int b[4];

  printf("%d\n", sizeof(b)); /* 16 */

  /* 如果数组名被当做参数传入函数 */

  FuncArray(a);

  return 0;
}

4)结构体求值

struct S1
{
  char c;  //4
  int i;     //8
};

printf("%d\n", sizeof(S1));   /* 8,结构体对齐  */

为什么需要字节对齐?这样有助于加快计算机的取数速度,否则多花指令周期

如果加上结构体对齐指令

#pragma pack(push)   // 将当前pack设置压栈保存
#pragma pack(2)     // 必须在结构体定义之前使用 ,设置为2个字节对齐
struct S1
{
char c;  //2
int i;      //4
};
struct S3
{
char c1;
S1 s;
char c2
};
#pragma pack(pop) // 恢复先前的pack设置

sizeof(S1) = 6

sizeof(S3) = 10

时间: 2024-08-01 19:51:56

SIZEOF函数使用的相关文章

【C++】sizeof()函数解析

[1] 常见数据类型的的sizeof函数得出的值表 char int short long float double 指针 32 bit 1 4 2 4 4 8 4 64 bit 1 4 or 8 2 8 4 8 8 [2] 数组求sizeof 的值 数组的大小 = 数组中元素的个数 x 该类型的大小 [3] union 求 sizeof 的值 由于 union 中存在复写现象,union 结构的 sizeof 的值即为 union 中最大的元素的大小.例如: union student{   

sizeof函数总结

sizeof函数功能:计算数据空间的字节数 1.与strlen()比较 strlen计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素. sizeof计算数据(包括数组.变量.类型.结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\0"的大小). 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种.所有指针变量的sizeof 操作结果均为4. 实例1::char *p; sizeof(p)=4; sizeof(*p) =

sizeof()函数的使用——————【Badboy】

1.sizeof的使用:sizeof操作符以字节形式给出了其操作数的存储大小. sizeof操作符不能用于函数类型,不完全类型或位字段.不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型.未知内容的结构或联合类型.void类型等. 2.sizeof的结果:sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型.该类型保证能容纳实现所建立的最大对象的字节大小. int.unsigned int .short int.unsigned sh

CC++中sizeof函数的用法

C/C++中sizeof()函数的用法 学习C/C++有时会遇到下面的情况: 已知 char *str1="absde"; char str2[]="absde"; char str3[8]={'a'}; char str4 [] = "0123456789"; 为什么sizeof(str1)=4 sizeof(str2)=6; sizeof(str3)=8; sizeof(str4)=11;呢? 丈二和尚摸不着头脑,接下来我们一起好好讨论讨论,

C语言中的sizeof函数总结

sizeof函数的结果: 变量:变量所占的字节数. int i = 0; printf("%d\n", sizeof(i)); //4 数组:数组所占的字节数. int arr_int1[] = {1,2,3,4,5}; int arr_int2[10] = {1,2,3,4,5}; printf("size_arr1=%d\n",sizeof(arr_int1)); //5*4=20 printf("size_arr2=%d\n",sizeof

sizeof函数详解

原文链接http://blog.csdn.net/wzy198852/article/details/7246836 sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下.但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不适合初学者,甚至都没有必要大作文章.但如果你想“知其然,更知其所以然”的话,那么这篇文章对你或许有所帮助.菜鸟我对C++的掌握尚未深入,其中不乏错误,欢迎各

sizeof()函数求各类型变量所占空间的方法

#include "stdafx.h" #include <iostream> using namespace std; void func(char str[100]) { cout<<sizeof(str)<<endl; } int main() { char str[100]; func(str); //str传入函数做参数,做sizeof运算时被当做指针 返回4 cout<<sizeof(str)<<endl; //返

C语言 sizeof函数详解

1. 定义:sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数.MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a type (including aggregate types). This keyword returns a value of type siz

C语言学习入门 (三) sizeof 函数、内存地址、数组

sizeof可以用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址. 凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址 2.  当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量.比如: char a = 'A';// A的ASCII