美文网首页
005:C结构体

005:C结构体

作者: xqiiitan | 来源:发表于2024-05-29 22:14 被阅读0次

结构体

自定义的数据类型;
由一批数据组合而成的结构型数据;
里面的每一个数据都是结构体“成员”

include <string.h>

struct GirlFriend { // 定义结构体
char name[100];
int age;
char gender;
double height;
};

int main() {
struct GirlFriend gf1; // 使用结构体
struct GirlFriend gf2 = {"小红", 22, "F", 1.92};
struct GirlFriend gf3 = {"小白", 12, "F", 0.92};

strcpy(gf1.name, "小丽"); // 字符串赋值
gf1.age = 18;
gf1.gender = 'F';
gf1.height = 1.90; 

struct GirlFriend gfArr[3] = {gf1, gf2, gf3};
for(int i=0; i<3; i++) {
    struct GirlFriend temp = gfArr[i];
    printf("name:%s, age:%d", temp.name, temp.age); 
}

}

结构体 起别名: typedef

typedef struct GirlFriend {
char name[100];
int age;
} GF;
// 使用的时候,不要在用struct声明, 直接使用
GF gf1;

GF arr[3] = {gf1, gf2, gf3}; // 别名使用在数组中。


结构体作为函数的参数

函数中可以传递结构体

两种情况:

  • 传递结构体中的数据值;
  • 传递结构体的地址值;

S stu;
strcpy(stu.name, "abc");
stu.age = 90;
method(stu); // 调用函数,给函数传递结构体。

// 传递结构体 S, 直接传递。修改后,不会影响调用处的值。
void method(S st) {
// 修改信息前的打印。
scanf("%s", st.name); // 输入姓名
scanf("%d", &(st.age)); // 输入年龄
// 修改后的信息打印
}

// 细节:函数中写的是结构体类型的变量,相当于定义了一个新的变量
// 如果要在函数中修改stu的值,此时就不要重新定义变量。直接接收stu的内存地址。
// p指针,记录的是main函数中stu的内存地址。
void method2(S* p) {
printf("接收main初始数据:%s, %d\n", (p).name, (p).age);
scanf("%s", (p).name); // 输入姓名
scanf("%d", &((
p).age)); // 输入年龄
printf("method函数修改之后的:%s, %d\n", (p).name, (p).age);
}
method2(&stu); // 传递stu的地址。

结构体嵌套

struct Message {
char phone[12];
char email[100];
};
struct Student {
char name[100];
char gender;
double height;
struct Message msg;
};

struct Student stu;
strcpy(stu.name, "Tom");
stu.age = 20;
stu.gender = "F";
stu.height = 1.90;
strcpy(stu.msg.phone, "10086");
strcpy(stu.msg.email, "123@qq.com");
// 值的访问
printf("phone:%s, email:%s\n", stu.msg.phone, stu.msg.email);

// 批量进行赋值
struct Student stu2= {"lisi", 22, "F", 1.88, {"10010","5678@qq.com"}};

结构体:

内存对齐:

确定变量位置:只能放在自己类型 整数倍 的内存地址上。
struct Num {
double a; //8
char b; //1 (空白3字节)
int c; //4
char d; //1 (空白补7个字节)
}; // 总占用:8+4+4+8 = 24Byte。

最后一个部位:结构体的总大小,是最大类型的整数倍。8*N

心得:小的数据写在上面,大的数据写在下面,以节约内存空间。

相关文章

  • C语言和OC的结构体(struct)

    Struct(结构体) 1.结构体定义 2.结构体变量 3.结构体数组 4.C语言结构体指针 5.C语言共用体 6...

  • 《The Big Nerd Ranch Guide》笔记1

    一、C结构体与Objective-C类之间: 共同点:C结构体是一块内存,对象也是一块内存。C结构体有数据成员,每...

  • c语言中的结构体

    结构体是 C 语言主要的自定义类型方案,这篇就来认识一下结构体。 一、结构体的形态 C源程序(struct.c):...

  • 闲聊C语言结构体

    结构体是 C 语言主要的自定义类型方案,这篇就来认识一下结构体。 一、结构体的形态 C源程序(struct.c):...

  • 嵌入式学习笔记19.11.25

    c语言结构体 结构体一般定义全局变量 struct stu{//struct 定义结构体 stu 结构体名称 in...

  • C++系列 --- 结构体、权限修饰符、类简介

    一、结构体 结构体:自定义的数据类型 C++ 中的结构和C中的结构有什么区别? C++中的结构除具备了C中的所有功...

  • 01-OC对象的本质

    OC是通过C/C++的什么数据结构实现我们的OC对象呢 结构体--OC对象的本质就是C/C++的结构体 Class...

  • 6.结构体相关

    一 C 结构体和结构体指针 eg1: 一 结构体里面定义函数 通过结构体指针访问结构体里面定义的函数。 eg2:

  • C语言 13 结构体数组

    C语言 13 结构体数组 结构体数组的定义 结构体数组初始化 结构体成员的使用 格式 : 字符串成员的处理 结构体...

  • 深入理解Runtime中的isa

    objc_object Objective-C 所有对象都是 C 语言结构体objc_object,这个结构体中包...

网友评论

      本文标题:005:C结构体

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