C语言学习日志 结构体 2024/12/12

C语言学习日志 结构体 2024/12/12

在C语言中,结构体是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起

定义结构体 :

复制代码
//定义一个简单的结构体
struct student {
char name[20];
int age;
float score;
};
/*
这里定义了一个名为student的结构体,
它有三个成员变量:name(用来存储字符数组
age(存储整数)和score(存储浮点数)
*/

初始化结构体

复制代码
struct student sl;
/*这里声明了一个名为s1的student结构体类型的变量*/

声明时初始化

复制代码
struct student s2 = {"Tom", 18, 90.5};
/*这样就初始化了s2结构体变量,它的name成员为"Tom",age成员为18,score成员为90.5。*/

可以用 . 来访问结构体

复制代码
sl.name 
sl.age
sl.score

可以用数组的方式放置多个

复制代码
struct student class[3] = {

{"Alice", 19, 92.0},

 {"Bob", 21, 88.0}, 

{"Cathy", 18, 95.0}

};


for (int i = 0; i < 3; i++) {

printf("Student %d: Name = %s, Age = %d, Score = %.2f\n", i + 1, 

class[i].name, 
class[i].age, 
class[i].score

);

}

/*
这里创建了一个包含3个student结构体元素的数组class,
然后通过循环遍历数组并打印每个结构体元素的成员信息。
*/

嵌套写法

1.传统写法

复制代码
struct Point { 
    int x; 
    int y; 
}; 
 
int main() { 
    struct Point p; 
    p.x = 1; 
    p.y = 2; 
    return 0; 
} 
2.简易写法
复制代码
struct Point { 
    int x; 
    int y; 
}; 
 
int main() { 
    struct Point p = {.x = 1,.y = 2}; 
    return 0; 
} 

嵌套写法

1.传统写法

复制代码
struct Inner { 
    int a; 
}; 
 
struct Outer { 
    struct Inner in; 
    int b; 
};
//初始化 

int main() { 
    struct Outer o; 
    o.in.a = 3; 
    o.b = 4; 
    return 0; 
} 

2.简易写法

复制代码
int main() { 
    struct Outer o = {.in = {.a = 3},.b = 4}; 
    return 0; 
} 

struct介绍

1. C中的 struct

在C语言中,struct 是一种用户自定义数据类型(UDT),主要用于封装数据。C中的结构体只能包含数据成员,不能包含成员函数。此外,C中的结构体没有访问权限的概念,所有成员默认都是公开的(public)

2. C++中的 struct

C++ 继承并扩展了C语言中的 struct。在C++中,struct 是一种抽象数据类型(ADT),支持成员函数的定义。C++中的结构体不仅能够包含数据成员,还可以包含成员函数。此外,C++中的结构体具有访问权限的概念,默认情况下,结构体的成员是公开的(public),这与类(class)的默认私有(private)访问权限形成对比。

3. 结构体与类的区别

在C++中,结构体和类的主要区别在于默认的成员访问权限。结构体的成员默认是公开的(public),而类的成员默认是私有的(private)。除此之外,结构体和类在功能上几乎没有区别,都可以包含数据成员和成员函数,支持继承和多态等特性。

4. 使用场景

由于结构体的默认公开访问权限,它通常用于表示简单的数据结构,而类则更适合用于实现复杂的对象和面向对象的设计。如果不需要与C兼容或传递参数给C程序,建议在C++中使用类而不是结构体。

5. 兼容性

C++中的结构体是为了与C语言兼容而存在的。因此,如果需要在C++中使用C语言的库或与C语言代码交互,可以使用结构体。

相关推荐
非凡ghost2 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
云间月13144 小时前
飞算JavaAI智慧教育场景实践:从个性化学习到教学管理的全链路技术革新
学习·飞算javaai挑战赛
weixin_456904276 小时前
一文讲清楚Pytorch 张量、链式求导、正向传播、反向求导、计算图等基础知识
人工智能·pytorch·学习
Python私教7 小时前
从“Hello World”到“高并发中间件”:Go 语言 2025 系统学习路线图
学习·中间件·golang
Brookty9 小时前
【Java学习】锁、线程死锁、线程安全2
java·开发语言·学习·java-ee
HalvmånEver15 小时前
在 C++ :x86(32 位)和 x64(64 位)的不同
开发语言·c++·学习
艾伦~耶格尔19 小时前
【数据结构进阶】
java·开发语言·数据结构·学习·面试
Janspran20 小时前
嵌入式linux学习 -- 进程和线程
linux·运维·学习
rannn_1111 天前
【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
css·后端·学习·html·javaweb