精华内容
下载资源
问答
  • 1.下列程序中,结构体变量n所占内存字节数是(答案为6?) union U {  char s[4];   int i;  long l; }; struct A {  int c;  union U u; }a; 2.若有下面的说明和定于: struct test {  int m1;...

    有朋友问:

    1.下列程序中,结构体变量n所占内存字节数是(答案为6?)

    union U
    {
            char s[4];        
            int i;
            long l;
    };
    struct A
    {
            int c;
            union U u;
    }a;

    2.若有下面的说明和定于:
    struct test
    {
            int m1;char m2;float m3;
            union uu{ char u1[5];int u2[2];} ua;

    }myaa;
    则sizeof(struct test)的值是(答案为12?)

    3.在16位的PC机上使用c语言,若有如下定义:
    struct data
    {
            int i;
            char ch;
            double f;
    }b;
    则结构变量b占用内存的字节数是(答案为11?)

    答复:
    如果你这是考试用题,建议你采用这个方式来计算:
    1、假设是在16位IBM-PC机上计算所占用内存的字节数,决定了各类型的宽度;
    2、union(共用体)变量的所占用内存的字节数为变量类型定义的变量的最大宽度变量;
    3、如果有数组要考虑数组的宽度(比如char[3]肯定小于int[2],cha[5]就按5个字节算,因为大于了int[2]);
    4、结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和;
    5、结构体里有结构体也要按照上面的方法计算。

    那么,由于假设16位IBM-PC机,所以:
    char:1字节、short:2字节、int:2字节、long:4字节、long long(即long long int):4字节、float:4字节、double:8字节、long doubule:10字节
    这样你就好计算了:
    题目1:union U u; u的宽度为最大char s[4];的4个字节,int c;2个字节。所以结果为6个字节。
    题目2、题目3你自己应该就会算了吧?

    有个问题还是要补充一下,在现在我们用的IDE在实际环境中,由于为了实现更快寻址和达到性能更优的原因,会有本机宽度和字节对齐的情况发生,所以你在你具体应用中会有一些不同情况的出现。另外,long double占用10字节空间,但有的编译器并不认可10字节,还是8字节,比如在VC++6.0下,用sizeof(long double)测出来的值仍然是8。所以我强调了第1点假设是在16位IBM-PC机上,而且估计你提的这几个问题都是考试用的,所以就按我上面说的方法去计算就可以。

     

    展开全文
  • C++并没有规定各种数据类型在内存中的存储大小,依赖于不同的编译器的不同而不同,要想获知当前编译器对各种数据类型分配的大小,可以通过sizeof运算符来获取。 使用方法1: sizeof(数据类型) 使用方法2: ...

    C++并没有规定各种数据类型在内存中的存储大小,依赖于不同的编译器的不同而不同,要想获知当前编译器对各种数据类型分配的大小,可以通过sizeof运算符来获取。

    使用方法1:

    sizeof(数据类型)  

    使用方法2:

    sizeof(变量名   或 常量名 或 表达式  )

    sizeof(int)     

    int  a;

    sizeof(a)

     

    [cpp] view plain copy
     
    1. //数据类型空间分配情况  
    2. #include <iostream>  
    3. using namespace std;  
    4. int main()  
    5. {    
    6.    cout<<"vc++6.0 编译环境下,各种数据类型变量所占的内存空间大小(字节为单位)"<<endl;  
    7.    cout<<"sizeof(int)  "<<sizeof(int)<<endl;  
    8.    cout<<"sizeof(short int)  "<<sizeof(short)<<endl;  
    9.    cout<<"sizeof(long int)  "<<sizeof(long)<<endl;  
    10.    cout<<"sizeof(unsigned int)  "<<sizeof(unsigned)<<endl;  
    11.    cout<<"sizeof(unsigned short int)  "<<sizeof(unsigned short)<<endl;  
    12.    cout<<"sizeof(unsigned long int)  "<<sizeof(unsigned long)<<endl;  
    13.    cout<<"sizeof(char )  "<<sizeof(char)<<endl;  
    14.    cout<<"sizeof(float)  "<<sizeof(float)<<endl;  
    15.    cout<<"sizeof(double)  "<<sizeof(double)<<endl;  
    16.    cout<<"sizeof(long double)  "<<sizeof(long double)<<endl;  
    17.    return 0;  
    18. }  

    运行结果

     



     

    转载于:https://www.cnblogs.com/beautiful-code/p/5239538.html

    展开全文
  • 共用体所占内存大小:共用体所占内存的大小即公用体中长度最大元素所占用的字节数。 #include<stdio.h> typedef union { long i; double dog; int k[6]; //4*6=24 char c; }DATE; struct data { char...

    共同体作用:让几个不同类型的变量共享同一个内存地址。
    共用体所占内存大小:共用体所占内存的大小即公用体中长度最大元素所占用的字节数。

    #include<stdio.h>
    typedef union
    { 
    	long i; 
    	double dog; 
    	int k[6]; //4*6=24
    	char c;
    }DATE;
    struct data
    { 
    	char *a;//8,本机指针占用8字节 
    	int cat; //4  +4
    	DATE cow; //24,前面刚好是8(double)的倍数 
    	double dog;//8
    	char a1; //1 +1
    	short dom;//2
    }too;
    main()
    {
    	printf("%d\n",sizeof(DATE));//共用体所占内存的大小即公用体中长度最大元素所占用的字节数。
    	printf("%d\n",sizeof(too));//56
     } 
    

    参考链接
    参考链接

    展开全文
  • 共用体所占内存大小:共用体所占内存的大小即公用体重长度最大元素所占用的字节数。方法一:结构体的内存大小=最后一个成员的偏移量 + 最后一个成员的大小 + 末尾的填充字节数偏移量:某个成员的实际地址和这个...

    共同体作用:让几个不同类型的变量共享同一个内存地址。

    共用体所占内存大小:共用体所占内存的大小即公用体中长度最大元素所占用的字节数。

    方法一:

    结构体的内存大小=最后一个成员的偏移量 + 最后一个成员的大小 + 末尾的填充字节数

    偏移量:某个成员的实际地址和这个结构体首地址之间的距离。

    例.1:

    struct data
    {
        char a;
        int b;
        double c;
    }

        比如说这个成员a,由于a是第一个成员,所以它的地址就是结构体的首地
    
    址,它相对于结构体的首地址的偏移就是零。
    
        第二个成员b,b成员距离结构体的首地址隔了一个变量a的大小,所以b的
    
    偏移量为4.那么结构体做字节对齐的时候有这样一个准测:
    
           *每一个成员相对于结构体首地址的偏移量都得是当前成员所占大小的整
    
        数倍,如果不是编译器就会在成员之间加上填充字节。*
    
         b的字节数是4,它的偏移量是1.这个时候,它的偏移量是1,1不是4的整
    
    数倍,所以编译器就是在a成员的后面做一个字节填充,让从b的偏移量变
    
    成4字节,这个时候b的偏移量就是b自身字节大小4的倍数了。
    
        那么,现在再看一下c,对c来说,它的自身大小也是8字节,它目前的偏移量是4(b的偏移量)+4(b的大小)=8,8是c自身大小8的倍数,所以这里编译器不会在成员b和c之间填充字节。
    
        此时c的偏移量 + c的字节大小 = 8 + 8 =16
    
        此时还没有结束,编译器还要去判断,现在的结构体总大小是不是结构体中最宽的基本类型成员大小的整数倍(按整个结构对对齐,整个结构体的对齐值通常是结构体中最大数据类型所占的空间)。
    
        此结构体中的最大数据类型为double,字节大小为8,16是8的倍数,所以c后面无需填充字节,即末尾的填充字节数为零。
    

    //一般来说,结构的对齐准测是:先按数据类型自身进行对齐,然后再按照整个结构体进行对齐。(两个)对齐。
    如果一个类型先按自身n字节进行对齐,那么该类型的偏移量得是自身字节数的整数倍。数据自身的对齐值通常就是数据所占的空间大小。整个结构的对齐值一般是结构体中最大数据类型所占的空间大小。

    展开全文
  • 和操作系统位数有关 1.如果操作系统是64位,则占8个字节;如果操作系统是32位,则占...3.如何看指针所占大小 和普通的变量一样,直接用sizeof #include<iostream> using namespace std; int main() { int a = 1
  • C语言错题本

    2019-12-30 20:25:58
    1.变量a所占内存字节数是( )。 union U {char st[4]; int i; long l; }; struct A {int c; union U u; }a; A: 4 B: 5 C: 6 D: 8 答案:D 解析:结构件变量所占内存长度是各成员占内存长度之和,而...
  • C语言程序错题

    千次阅读 2019-12-29 16:56:37
    1.当定义一个结构体变量时系统分配给它的内存是:______ A: 各成员所需内存量的总和 ...2.变量a所占内存字节数是( )。 union U {char st[4]; int i; long l; }; struct A {int c; union ...
  • 301、变量a所占内存字节数是 A) 4 B) 5 C) 6 D) 8 union U { char st[4]; int i; long l; }; struct A { int c; union U u; }a;、C、3 302、标准函数 fgets(s, n, f) 的功能是 A) 从文件f中读取长度为n的字符串存入...
  • C/C++中的字节对齐

    2017-11-09 17:04:53
    在C/C++中使用sizeof()计算结构体所占内存时获得的字节数并不是每个成员变量的所占字节大小的和,如定义结构体A struct A { int a1; char a2; }; sizeof(A)返回的值为8,而不是sizeof(int)+sizeof(char)=5 另外...
  • 49_共用体变量

    2014-08-12 19:43:57
    //它们在内存所占字节数并不相同,但是都从同一地址开始存放 //这几个变量是相互覆盖的,此时,便需用到共用体 //共用体变量所占用的内存长度等于最长的成员的长度 #include #include union data { int a; ...
  • 观察指针变量的大小   程序运行结果来看:尽管变量类型的大小不同,但是指向它们的指针变量的大小相同,且均占用4个字节... 绝大多计算机将字节作为最小的可寻址的内存空间,内存的每一个字节都由一个唯一的...
  • 假设:int a=1;int b=2;下面是对其进行的模拟内存分析...作用:用来计算变量,常量或者是一种数据类型所占内存字节数。 基本形式:sizeof(变量名|常量|数据类型),完成之后返回一个值。 ①. Sizeof 变量
  • sizeof可以用来计算一个变量或者一个常量、一种数据类型所占内存字节数。 sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一...
  • sizeof可以用来计算一个变量或者一个常量、一种数据类型所占内存字节数。 sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一...
  • 结构体内存对齐

    2021-04-05 19:51:57
    结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。 结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节数的整数倍。 结构体变量的总大小,为...
  • 大小端字节序的判断

    2018-09-20 12:23:35
    大小端字节序是由于CPU和OS对大于一个字节变量各个字节内存中的存储顺序不同而产生的。 以两个字节的十六进制0xabcd为例, 小端字节序: [15…8] [7…0] a b c d 如上示,内存的起始地址的第一...
  • C++__变量

    2018-10-14 20:40:38
    char s[20] :数组类型,输入姓名 ...sizeof()作用就是_返回一个对象或者类型所占内存字节数 int a[10] sizeof(a) 是40(个字节) _countof(a) 是10(个元素),必须包含stdlib.h头文件才能使用 ...
  • 数据结构类型(内存篇)

    千次阅读 2021-01-23 23:00:06
    2.其他起始地址为该类型变量所占内存的整数倍,如果不足部分用数据填充到所占内存的整数倍 3.结构体所占总内存为该结构体的成员中基本数据类型占字节数最大的整数倍 (见图解1-1) #include<stdio.h> struct ...
  •  我们先看看sizeof的定义——sizeof的结果等于对象或者类型所占内存字节数,好吧,那让我们来看看S1的内存分配情况  S1 s1 = { 'a', 0xFFFFFFFF };  定义上面的变量后,加上断点,运行程序,观察s1所在的...
  • 在系统默认的对齐方式下:每个成员相对于这个结构体变量地址的偏移量正好是该成员类型所占字节的整数倍,且最终占用字节数为成员类型中最大占用字节数的整数倍。 struct struct1 { char a; int b; short c; }...
  • 题目 一个 int 类型变量或 double 类型变量在连续几个字节的 内存中存放。读取数值时,当数值中...• 注意:int 类型变量和 double 类型变量所占字节数及一 个变量的几个字节的存放顺序与所用计算机的体系结 构和编译
  • c++内存对齐

    2008-11-02 17:59:00
    一.计算struct的size有两个原则:#pragma pack(n) n是编译器的对齐字节数(1)struct中各成员按照对齐原则:在为...(2)待所有变量都分配完毕之后,还要比较当前所占内存(设为c)与struct中长度最大的变量的长度

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

变量a所占内存字节数