美文网首页
C语言_笔记

C语言_笔记

作者: bboymonk | 来源:发表于2017-04-25 21:27 被阅读0次

    1,结构体:

    占多少内存?
    如下图a,b,c三个变量。假如a占4个字节,b占1个字节,c占4个字节。那么struct wjb这个结构体占多少内存呢?
    a是首地址,偏移量是0,b的偏移量是a,也就是4个字节,c的偏移量是a+b,也就是5个字节。
    结构体的内存占用计算方式是:最后地址的字节数+偏移量+填充字节(如果a+b的偏移量不是C的整数倍,将自动填充成c的整数倍,注意:每个变量的偏移量必须是自身所占字节的整数倍。)。最后计算出来结果是:4+1+(3)+4=12。

    注意:如果计算出来的结果不是这个结构体内最宽的数据类型(这里是int)的字节数的整数倍,那么这个最宽的数据类型将自动填充字节。
    #include<stdio.h>
    struct wjb{ 
      int a;
      char b;
      int c;
    
    
    
     //char name[20];
     //int price;
    };
    int main(){
     struct wjb wjb_1 = {"wjb_name",1000};
     printf("%s\n,%d\n",wjb_1.name,wjb_1.price);
     struct wjb * w;
     w = &wjb_1;
     printf("name=%s\n",w->name);
     struct wjb wjb_2[2]={{"aaa",100},{"bbb",200}};
     struct wjb * p;
     p=wjb_2;
     printf("%s\n",p->name);
     p++;
     printf("%s\n",p->name);
    return 0;
    }
    

    2,公用体:

    公用体和结构体的内存占用不一样,公用体内的变量用的是同一个地址,所占内存是公用体内最宽的那个变量的字节数。

    相关文章

      网友评论

          本文标题:C语言_笔记

          本文链接:https://www.haomeiwen.com/subject/uwlbzttx.html