标签:大括号 str 运算符 size 代码分析 写法 结构体 inf 相加
1 课堂回顾
作用域与生命周期
2 static 局部变量
2 打字游戏
3 内存分区代码分析
4 结构体基本操作
(复合类型[自定义类型
#include <stdio.h>
#include <string.h>
// 定义一个结构体类型
// 1、struct是关键字
// 2、struct Student合起来才是结构体类型
// 3、结构体内部定义的变量不能直接赋值
// 4、结构体只是一个类型,没有定义变量前,是没有分配空间,没有空间,就不能赋值
struct Student
{
int age;
char name[50];
int score;
}; // 有分号
int main(int argc, char *argv[])
{
// 定义结构体变量
// 1、类型名变量名
struct Student stu; // 别忘了struct关键字
// 1、结构体变量初始化,和数组一样,要使用大括号
// 2、只有在定义时才能初始化
struct Student stu2 = {18, "mike", 59};
// 使用结构体成员,不能直接使用,需要借助结构体变量来引用
struct Student tmp;
// 如果是普通变量,使用. 点运算符
tmp.age = 18;
// tmp.name = "mike"; // name成员是数组名,数组名是常量,不能修改
strcpy(tmp.name, "mike");
tmp.score = 59;
// 如果是指针变量,使用->
// 如果是指针,指针有合法指向,才能操作结构体成员
struct Student *p;
p = &tmp;
p->age = 18;
strcpy(p->name, "mike");
p->score = 59;
// 任何结构体变量都可用 . 或->操作成员
(&tmp)->age = 18; //操作指针
(*p).age = 18; //操作内存
return 0;
}
5 结构体使用画图
结构体大小可以简单认为是上面几个相加,但是实际上比他们大,因为有一个结构体对齐的问题
*p等价于p[0]
// .优先级高,所以*p.age 需要写(*p).age
06 结构体变量使用补充
07 结构体数组
#include <stdio.h>
#include <string.h>
struct Student
{
int age;
char name[50];
int score;
};
int main()
{
//
struct Student a[5] =
{
18, "mike", 59,
22, "jiang", 66,
33, "xiaobai", 87,
29, "lily", 77,
30, "lucy", 68};
// 求平均分
int i = 0;
int n = sizeof(a) / sizeof(a[0]);
int sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i].score;
}
printf("平均分: %d\n",sum/n);
}
int main01(int argc, char *argv[])
{
struct Student s;
struct Student a[5]; // 结构体数组
// (a+1) 指针
// 第一种写法:操作元素
a[0].age = 18;
strcpy(a[0].name, "mike");
a[0].score = 50;
// 第二种写法:操作某个元素地址
(a + 1)->age = 19;
strcpy((a + 1)->name, "jiang");
(a + 1)->score = 59;
//第三种写法:操作元素
(*(a + 2)).age = 18;
strcpy((*(a + 2)).name, "lily");
(*(a + 2)).score = 59;
struct Student *p = a;
p = &a[0];
p[3].age = 21;
strcpy(p[3].name, "xiaoming");
p[3].score = 62;
(p + 4)->age = 22;
strcpy((p + 4)->name, "xiaojiang");
(p + 4)->score = 88;
int i = 0;
int n = sizeof(a) / sizeof(a[0]);
for (i = 0; i < n; i++)
{
printf("%d, %s, %d\n", a[i].age, a[i].name, a[i].score);
}
return 0;
}
08 结构体嵌套
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Info
{
int age;
char name[50];
};
struct Student
{
struct Info info; //结构体嵌套
int score;
};
int main(int argc, char const *argv[])
{
struct Student s;
s.info.age = 18;
strcpy(s.info.name, "mike");
s.score = 59;
struct Student *p = &s;
p->info.age = 18;
strcpy(p->info.name, "mike");
p->score = 59;
struct Student tmp = {18, "mike", 59};
printf("%d, %s, %d\n", tmp.info.age, tmp.info.name, tmp.score);
return 0;
}
9 结构体赋值
10. 思考题
11 结构体值传递和地址传递的区别
12 指针指向栈区空间
13 指针指向堆区空间
14 非法使用内存导致的错误说明
标签:大括号 str 运算符 size 代码分析 写法 结构体 inf 相加
原文地址:https://www.cnblogs.com/eret9616/p/10223067.html