您的位置:首页 > 其它

结构体的使用以及结构体内存对齐

2017-11-25 22:08 344 查看
1.结构体声明

struct stu    //结构体类型声明方法一
{
char name[20];
char sex[5];
char phone_number[20];
struct stu *p;
}stu1;


struct     //结构体类型声明方法二(省略标签)
{
char name[20];
int age;
char sex;
}t2;


2.机构体变量定义及其赋值

#include<stdio.h>
struct stu
{
char name[20];
char sex[5];
char phone_number[20];
struct stu *p;
}stu1={ "朱大明","男","138****2356" };    //定义结构体变量stu1并赋值  (方法一)

int main()
{
struct stu stu2 = { "朱大明","男","138****2356" };//定义结构体变量stu1并赋值(方法二)
//  t2 = {23,'男'};     //错误
t2.age = 23;                                      //成员变量赋值
t2.sex = 'M';                                    //成员变量赋值
strcpy(t2.name, "朱小明");    //字符数组做成员变量不能直接赋值字符串,需要用strcpy()函数;
return 0;
}


3.内存对齐

首先得掌握结构体的对齐规则:

1.第一个成员在与结构体变量偏移量为0的地址处。

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数与 该 成员大小的较小值。(VS中默认的值为8,Linux中 的默认值为4 )

3. 结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。

4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

例:

struct stu
{
char name[20];
char sex[5];
char phone_number[20];
struct stu *p;
}




分析原图点这里

printf("%d\n", sizeof(struct stu));  //下图为运行结果




4.结构体传参

#include<stdio.h>
void show(struct stu stu2)
{
printf("%s\n", stu2.name);
}
void show1(struct stu *p)
{
printf("%s\n", p->name);
}
int main()
{
struct stu stu2 = { "朱大明","男","138****2356" };
struct stu *p = &stu2;
show(stu2);      //传递结构体变量
show1(p);        //传递指针
return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct 内存 结构