现在的位置: 首页 > 综合 > 正文

结构体

2018年08月22日 ⁄ 综合 ⁄ 共 1102字 ⁄ 字号 评论关闭

1、    strcut A { int a; char b; short c ;};
    sizeof(sturct A)=? 8
    struct B {char b; int a; short c ;}
    sizeof(struct B)=?  12
原因:{char b; int a; short c ;}

第一个b占据1个字节,剩下了3个字节,当编译器尝试将a放入的时候发现a需要四个字节,拿3个不够,于是,编译器个放弃那三个字节,重新使用4个,然后就是c了

结构体长度求法:
  a.成员都相同时(或含数组且数组数据类型同结构体其他成员数据类型):
  结构体长度=成员数据类型长度×成员个数(各成员长度之和);
  结构体中数组长度=数组数据类型长度×数组元素个数;
  b 成员不同且不含其它结构体时;
  (1).分析各个成员长度;
  (2).找出最大长度的成员长度M(结构体的长度一定是该成员的整数倍);
  (3).并按最大成员长度出现的位置将结构体分为若干部分;
  (4).各个部分长度一次相加,求出大于该和的最小M的整数倍即为该部分长度
  (5).将各个部分长度相加之和即为结构体长度

#pragma pack(1) 我们可以通过#pragma pack()来修正对齐的  这个是告诉编译器字节对齐模式 特别是在内联汇编开发的时候这个比较重要。
struct B
{
    char b;
    int a;
    short c;
};
struct A
{
    int a;
    char b;
    short c ;
};
22、、    char str1[] = "abc";
    char str2[] = "abc";
    const char str3[] = "abc";
     const char str4[] = "abc";
     const char* str5 = "abc";
     const char* str6 = "abc";

    count << boolalpha<<(str1==str2)<<endl;
    count << boolalpha<<(str3==str4)<<endl;
    count << boolalpha<<(str5==str6)<<endl;

答案 F F T;

VOID GetMemory (char *p){p=(char *)malloc(100);}有什么问题

应该改为::::void  GetMemory(char **p){*p = (char *)malloc(100);}

//    第一题 函数 没有作用, 没有达到 址传递。传进来的参数 内存也根本是没有分配的。
    char *str = NULL;
    GetMemory(&str);
    strcpy(str, "mmm");
    puts(str);

抱歉!评论已关闭.