C语言结构体知识点梳理
1 结构体基本概念
1.1 定义与创建
一、通常定义
// 定义
struct Person{
int number;
char sex;
double money;
}p1;
// 创建 & 初始化:需要分配变量名
p1 = {
}; //全局变量(高址->低址)
struct Person p2 = {
}; //局部变量 (高址->低址)
static struct Person p3 = {
}; //静态全局变量 (低址->高址)
p1.number = 1; // 正确的初始化方式
p2.number = 1; // 正确的初始化方式
p3.number = 1; // 正确的初始化方式
二、匿名定义
struct{
int number;
char sex;
double money;
}P;
// 创建 & 初始化:无法创建除 P 外其他的结构体变量
// P = {}; // 错误的初始化方式
P.number = 1; // 正确的初始化方式(唯一全局变量)
三、类型定义
typedef struct{
int number;
char sex;
double money;
}W;
// W 等价替代 struct Person
W w00 = {
}; //此时的 w00 仅为局部变量
static W w01 = {
}; //此时的 w00 为静态全局变量
w00.number = 1;
四、多重定义
typedef struct People{
int number;
char sex;
double money;
}w1, w2;
// w1 等价替代 struct People
// 定义静态变量的 2 种方法
static struct People p000 = {
};
static w1 w111 = {
};
// 定义局部变量的 2 种方法
struct People p = {
};
w1 w112 = {
};
有关变量地址的讨论详见p.s.
1.2 初始化与调用
一、顺序初始化
二、指定初始化
调用原则:
给(返回值(将作为右值),参数列表实际赋值):地址
取(左值,参数列表定义):指针
子函数内:不加&或*
演示代码
#include <stdio.h>
struct student_st
{
char c;
int score;
const char *name;
};
static void show_student(struct student_st *stu)
{
printf("c = %c, score = %d, name = %s\n", stu->c, stu->score, stu->name);
}
int main(void)
{
// method 1: 按照成员声明的顺序初始化
struct student_st s1 = {