(拾遗也是备忘)还是老样子,想说的话都在注释里,如果你的vs配色调得好的话应该比直接这么看省劲
类型与变量
比如
int a
就是 类型int 变量a
就这么简单,不要怕,只不过后来的类型都是自己编的而已,是同样的东西而已。成员是自己编的类型里的各种“数据项”【具体的就在下面第一个结构声明的注释里】
(学数据类型这一章时我 类型,变量,成员 都没搞懂(#捂脸),后来学了c艹才有感觉。。)
#include <stdio.h>
struct A //定义A类型
{
int num; //成员num
char sex;
}zhao; //变量zhao(A类型的)==========知识点分割线===============
typedef struct B //B可加可不加,加了多余,否则B、C都存在并同样是这种类型
{
int num;
}C; //P239 将变量名换成类型名并生成之,然后用它去定义变量
void main()
{
struct A chen = { 100,'m' };
printf("%d %c\n", chen.num, chen.sex);
//struct A chen = { chen.num = 150};//不能多次初始化
chen.num = 150;
printf("%d %c\n", chen.num, chen.sex);
B zhao = { 75 }; //就像int a= 100;一样
C li = { 65 }; //B、C都可以代表同一个类型,但是不冲突
printf("%d \n", zhao.num);
printf("%d \n", li.num);
typedef A D;//将A类型重命名为D类型
/*struct D会报错,此处不需要struct*/
D wang = { 95,'m' };
printf("%d %c\n", wang.num, wang.sex);
struct A xiang = { 93,'m' };//没报错,还能继续用!
printf("%d %c\n", xiang.num, xiang.sex);
//============知识点分割线===================================================
typedef int CNM;
CNM a = 10;
printf("%d\n", a);
int b = 5;//int仍然可以用哦~
printf("%d\n", b);
}
结构体变量定义
结构体成员变量定义有3种,(谭浩强 第四版 P295-P296)
1声明结构体类型 再 “类型 变量名”【如上方A类型】
2声明结构体类型 在尾巴分号前加 变量名【如上方B类型】
3*不指定类型名而直接定义结构体类型变量(这分明是就为了用一次啊,不打算再用这类型定义别的变量了)【如下】
struct
{
int num;
//其他成员……
}C;
这样也就用这么样儿地(mun 其他成员)类型的变量C,想再定义别的变量都没名字让你找!
typedef方式
同时这↑(第三种结构体变量定义)也方便了这种typedef方式(防止像例子注释那样一下子定义两个一模一样却名字不同的数据类型)
typedef struct
{
int num;
//其他成员……
}C;
P239(谭浩强 第四版)这页有一句话大义是: 将变量名换成类型名并生成之,然后用它去定义变量。
于是第三种“难以理喻”的声明方法就派上用上了~只有变量名而没有多余的类型名。
#include<stdio.h>
int main()
{
typedef int CNM;
CNM a = 10;//其实就是int a
int b = 5;//int还能用
printf("%d %d", a,b);
}
这样就能理解本来就上面一句这么简单的一个类型替换为上面难以理喻的“没有第一个类型的”typedef了吧~
P329中(4)#define(预编译时字符串替换)和typedef(编译时先生成一个类型名,再用它去定义变量)的区别:
typedef struct B //B可加可不加,加了多余,否则B、C都存在并同样是这种类型
{
int num;
}C; //P239(谭浩强 第四版) 将变量名换成类型名并生成之,然后用它去定义变量
这是typedef与结构结合使用,实际上完成两个操作:
1) 定义一个新的结构类型struct B。
2) typedef为这个新的结构struct B起了一个名字,叫C。
结构体使用注意事项
1.作用范围(函数内定义,则仅在函数内部有效)
2.结构体变量的定义仅限在函数内部(不然报错)
3.只能在定义的时候初始化才能全部赋值,之后就不能再全体赋值了,只能单个赋值如: s1.title = "yuwen";//单个赋值;
4.结构体之间可以直接赋值,输入输出则需要如: printf(“%s\n%s\n%f”,s1.title,s1.author,s1.value);…………
5.结构体可以嵌套,访问也需要“找到底“。
6.结构体数组
、指向结构体的指针
7.向函数传递结构体信息(结构体成员、结构体指针(地址)、直接用结构体对象)