C语言结构体知识点梳理

本文详细介绍了C语言中的结构体,包括定义与创建、内存对齐规则、多文件编译下的结构体处理,以及如何在静态库中兼容结构体的修改。还探讨了位域设置,并提醒读者位域的非跨平台性。最后提供了结构体变量存储的实例分析。
摘要由CSDN通过智能技术生成

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 = {
   
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值