C语言中的sizeof函数总结

sizeof函数的结果:

  1. 变量:变量所占的字节数。

    int i = 0;
    printf("%d\n", sizeof(i));    //4
  2. 数组:数组所占的字节数。

    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(arr_int2)); //10*4=40
  3. 字符串:其实就是加了‘\0‘的字符数组。结果为字符串字符长度+1。

    char str[] = "str";
    printf("size_str=%d\n",sizeof(str));    //3+1=4
  4. 指针:固定长度:4(32位地址环境)。
    • 特殊说明:数组作为函数的入口参数时,在函数中对数组sizeof,获得的结果固定为4:因为传入的参数是一个指针。

      int Get_Size(int arr[]) {
          return sizeof(arr);
      }
      
      int main() {
          int  arr_int[10] = {1,2,3,4,5};
          printf("size_fun_arr=%d\n",Get_Size(arr_int));    //4
      }
  5. 结构体
    1. 只含变量的结构体:

      1. 结果是最宽变量所占字节数的整数倍:[4 1 x x x]

        typedef struct test {
            int i;
            char ch;
        }test_t;
        printf("size_test=%d\n", sizeof(test_t));    //8
      2. 几个宽度较小的变量可以填充在一个宽度范围内:[4 2 1 1]

        typedef struct test {
            int i;
            short s;
            char ch1;
            char ch2;
        }test_t;
        printf("size_test=%d\n", sizeof(test_t));    //8
      3. 地址对齐:结构体成员的偏移量必须是其自身宽度的整数倍:[4 1 x 2 1 x x x]

        typedef struct test {
            int i;
            char ch1;
            short s;
            char ch2;
        }test_t;
        printf("size_test=%d\n", sizeof(test_t));    //12
    2. 含数组的结构体:包含整个数组的宽度。数组宽度上文已详述。[4*10 2 1 1]

      typedef struct test {
          int i[10];
          short s;
          char ch1;
          char ch2;
      }test_t;
      printf("size_test=%d\n", sizeof(test_t));    //44
    3. 嵌套结构体的结构体
      1. 包含整个内部结构体的宽度(即整个展开的内部结构体):[4 4 4]

        typedef struct son {
            int name;
            int birthday;
            }son_t;
        
        typedef struct father {
            son_t  s1;
            int wife;
        }father_t;
        
        printf("size_struct=%d\n",sizeof(father_t));    //12
      2. 地址对齐:被展开的内部结构体的首个成员的偏移量,必须是被展开的内部结构体中最宽变量所占字节的整数倍:[2 x x 2 x x 4 4 4]

        typedef struct son {
            short age;
            int name;
            int birthday;
            }son_t;
        
        typedef struct father {
            short age;
            son_t  s1;
            int wife;
        }father_t;
        
        printf("size_struct=%d\n",sizeof(father_t));    //20

原文地址:https://www.cnblogs.com/cage666/p/8519364.html

时间: 2024-10-03 23:00:33

C语言中的sizeof函数总结的相关文章

C语言中的sizeof中的数组和指针

1.引子 今日在看动态规划的0-1背包问题,看完后还是打算自己写着试试,毕竟实践才能出真知嘛.动态规划的结果是个二维数组dp,我copy书上的例子进行初始 memset(dp,0,sizeof(dp)),考虑到程序的健壮性,对于数组我都是用的动态申请,自然二维数组也不例外[动态二维数组的建立可参见本blog的延伸]. 程序写完后,但是却不能运行,开始单步调试,当进行到dp的赋值时老是报指针的错误!!!开始我以为是指针越界什么的,仔细才发现dp的数组维数确实要多申请一个用来存放初始情况的值(全是0

转]解析C语言中的sizeof

解析C语言中的sizeof 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出 了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类型名.操作数的存储大小由操作数的类型决定. 二.sizeof的使用方法 1.用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住.如sizeof(int). 2.用于变量 sizeof使用形式:sizeof(var_name)或size

C语言中的sizeof关键字

说明: ******C语言中的sizeof是一个关键字,也是一个操作符,并不是一个函数,用来计算某一变量,或数据类型所占用的内存字节数. ******sizeof有三种使用方式: ***sizeof(变量名)    (加括号) ***sizeof  变量名  (不加括号) ***sizeof(数据类型) C语言中的sizeof关键字

C语言中的system函数参数详解

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数执行命令和在DOS窗口中执行命令的效果是一样的,所以只要在运行窗口中可以使用的命令都可以用SYSTEM()

c语言中的rewind函数,Win CE 不支持,可用fseek函数替换

FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell(read); // c语言中的rewind函数就是把文件指针从你现在读取的位置,重新指向文件开头 // Win CE 不支持该函数,可用fseek函数替换 // rewind(read); fseek(read,0L,SEEK_SET); …… …… }

C语言中的system函数參数具体解释

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,能够直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数运行命令和在DOS窗体中运行命令的效果是一样的,所以仅仅要在运行窗体中能够使用的命令都能够用SYSTEM(

c语言中的malloc函数

少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小. 函数:void *malloc(int size); malloc 向系统申请分配指定size个字节的

C语言中的sizeof和strlen

1.sizeof是算符,strlen是函数: 2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的: 3.大部分编译程序,在编译的时候就把sizeof计算过了,这是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因: 4.strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小: 5.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧,这是因为sizeof是个操作符不是个函数. 示例代码:

C语言中的memset函数和数组指针

代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 int main(){ 7 int a[5] = {1}; 8 memset(a,5,sizeof(a)); 9 cout<<a[0]<<" "<<a[1]<<endl; 10 cout<<a<<" "<<a+