13、黑马程序员-C语言结构体

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、什么是结构体


对于数组中,每个元素都是相同的,如果我们想使每个元素不同的话,我们可以考虑使用结构体。
结构体可以由多种不同类型的数据类型组成的新的数据类型

二、结构体的定义
格式:
struct 结构体名 {
    数据类型 变量1;
    数据类型 变量2;
    数据类型 变量3;
    ... ...
}

例如:
struct Student {
    int age;
    charchar *name;
};
三、结构体变量的定义

1、先定义结构体,再定义变量
struct Student {
    int age;
    charchar *name;
};
struct Student stu;

2、定义结构体的同时定义变量
struct Student {
    int age;
    charchar *name;
} stu;
 
3、直接定义结构体变量
struct {
    int age;
    charchar *name;
} stu;

四、结构体的初始化


1、声明变量的同时初始化
struct Student {
    int age;
    charchar *name;
};
struct Student stu = {22, "hello"};

2、先声明变量,再逐一初始化
struct Student stu;
stu.age = 22;
stu.name = "hello";
3、定义结构体的同时进行变量定义和初始化
struct Student {
    int age;
    charchar *name;
} stu = {22, "hello"};

4、非顺序初始化
struct Student stu = {.name = "hello", .age = 22};

5、注意:如果没有初始化结构体,所有变量会自动的有默认值

五、访问结构体

1、结构体变量是基本数据类型
int age = stu.age;
charchar *name = stu.name;

2、结构体变量是结构体
struct Date {
    int year;
    int month;
    int day;
};

struct Student {
    int age;
    charchar *name;
    struct Date birthday;
};

struct Student stu = {22, "hello", {1999, 10, 10}};
int year = stu.birthday.year;
int month = stu.birthday.month;
int day = stu.birthday.day;
3、相同结构体类型变量间可以整体赋值

struct Student stu1 = {23, "hello"};
struct Student stu2 = stu1;     // 把结构体变量stu1的值对应的赋值给stu2,所以stu2 = {23, "hello"}

六、结构体数组

1、三种定义方式:
// 方式一
struct Student {
    int age;
    charchar *name;
} stus[3];

// 方式二
struct Student {
    int age;
    charchar *name;
};
struct Student stu[3];

// 方式三
struct {
    int age;
    charchar *name;
} stus[3];

2、初始化
和数组的初始化一样,可以参照数组笔记。
stus = {{12, "hello"}, {23, "world"}, {24, "welcome"}}

七、结构体指针

1、格式
struct 结构体名 *指针名;

2、访问结构体的方式增加了
之前访问结构体的方式是
结构体变量名.成员变量名
现在增加了
(*指针名).成员变量名
指针名->成员变量名

3、例子
struct Student {
    int age;
    charchar *name;
};

struct Student stu = {23, "hello"};
struct Student *p = &stu;

printf("%d, %s\n", stu.age, stu.name);
printf("%d, %s\n", (*p).age, (*p).name);
printf("%d, %s\n", p->age, p->name);
八、结构体与函数

1、结构体作为函数参数
结构体实参会把成员变量值对应的赋值给函数结构体参数对应的变量值,改变函数结构体参数不会影响到实参。
struct Student {
    int age;
    charchar *name;
};
void test(struct Student s)
{
    // 对结构体s的操作不会影响到stu
    s.age = 10;
    s.name = "world";
}
int main()
{
    struct Student stu = {23, "hello"};
    test(stu);
    printf("%d, %s\n", stu.age, stu.name);
    return 0;
}
输出:
23, hello

2、结构体指针作为函数参数
struct Student {
    int age;
    charchar *name;
};

void test(struct Student * s)
{
    // 对结构体s的操作会影响到stu
    s->age = 10;
    s->name = "world";
}

int main()
{
    struct Student stu = {23, "hello"};
    test(&stu);
    printf("%d, %s\n", stu.age, stu.name);
    
    return 0;
}

输出:

10, world


------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

### 黑马程序员 C语言 教案 资料 下载 根据需求,以下是关于黑马程序员提供的C语言教案或教学资料的相关信息: #### 1. **黑马程序员 C语言提高课程配套课件** 配套课件由黑马程序员提供,专注于C语言的高级特性和应用技巧。该资源适合希望深入了解C语言的编程爱好者,涵盖了指针、内存管理、数据结构等核心主题[^1]。 - **下载地址**: [点击访问](https://gitcode.com/Premium-Resources/ed1c2) #### 2. **《黑马程序员C语言入门笔记》** 此笔记专为C语言初学者设计,内容详尽,覆盖基础知识、核心语法及高级概念。它以通俗易懂的方式讲解了数据类型、运算符、指针、数组、结构体等内容,有助于学习者系统掌握C语言[^2]。 - **下载地址**: [点击访问](https://gitcode.com/Premium-Resources/a2090) #### 3. **黑马程序员 C语言进阶教程** 进阶教程深入分析了C语言的底层原理,包括但不限于内存分配(内存模型)、函数调用模型、指针以及动态链接库等方面的内容。这套教程被广泛推荐给那些希望通过理解其现机制来进一步提升技能的学习者[^3]。 - **百度网盘地址**: [点击访问](https://pan.baidu.com/s/1dOipEZHoOUpAXFajG4AFUA) - **提取码**: `gzhu` #### 4. **黑马程序员——C语言基础教程笔记** 基础教程笔记来源于一位研究生在求职准备期间整理的学习记录。这些笔记基于黑马程序员官方课程制作而成,能够帮助初学者快速熟悉C语言的核心知识点[^4]。 - **课程链接**: [点击访问](http://yun.itheima.com/course/369.html) #### 5. **其他补充说明** C语言因其高效性、灵活性和强大的功能而受到全球开发者的欢迎。无论是Windows、Mac OS X还是Linux等多种操作系统环境,均支持C语言编译器运行程序。此外,许多现代编程语言如C++、Java、Python等都受到了C语言设计理念的影响[^5]。 ```python # 示例代码:简单的C语言 Hello World 程序 #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值