C++学习(二十四)(C语言部分)之 结构体1
程序员文章站
2024-01-05 16:09:28
1.结构体 存放多个不同类型的数据 但是是相关联的 数组 存放多个相同类型的数据 结构体是存放多个相关联的不同类型的数组 struct 定义一个结构体类型 自定义类型 2.结构体定义方式 定义类型最通用的方式: struct student ///student是自己取得名字 结构体定义的时候也可以 ......
1.结构体 存放多个不同类型的数据 但是是相关联的
数组 存放多个相同类型的数据
结构体是存放多个相关联的不同类型的数组
struct 定义一个结构体类型 自定义类型
2.结构体定义方式 定义类型
最通用的方式:
struct student ///student是自己取得名字
结构体定义的时候也可以初始化
3.定义结构体类型的变量
//开始使用
4.运算符 点运算符(成员运算符) .
定义的时候初始化
指针 箭头运算符 -> (只能用于结构体指针)
其他
结构类型可以包含任何已经定义好的类型
给名字比较长的类型 取一个短的外号 用起来方便
5.取别名便于联想(功能) 方便
typedef+类型名字+外号; 用的时候直接用外号
type 是类型 def 是define 宏定义的意思
6.
6.1 结构体大小 大于或等于所有的成员之和
原因 内寻对齐(速度快) 可能会牺牲一部分内存
6.2 c语言和c++结构体区别
c++可以省略struct 但c不可以 定义的时候不可以省略
6.3 关于结构体名字 大于类型的时候可以省略(匿名结构体)
/*
单引号用于字符
双引号用于字符串
数字 变量名不需要单引号或双引号
x,yxx-->坐标 定义结构体类型 返回结构体类型变量
1、定义类型
2.用自己定义的类型变量
3.为了方便用typedef给类型取别的名字
*/
测试代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<time.h> 4 5 #pragma warning(disable:4996)//解决在vs2013中strcpy出错,原因是strcpy安全性太低 vs弃用了 改成了strcpy_s 6 7 struct student //student 自己取得名字 结构体类型的名字 8 {//下面的是存放的内容 称之为成员 9 char name[20]; 10 char sex; 11 int age; 12 char id[20]; 13 }; //后面要加分号 表示定义结束 14 15 struct myclass //新的结构体类型 16 { 17 struct student num24[64]; // 18 char id; // 19 //student myclall summer;//不完整类型 这种就不可以 因为我们还没有定义myclass 20 21 }; 22 23 typedef struct myclass mc; //mc就是别名 别名为了区分 可以用大写 24 typedef int int;//大写的别名 要取多个别名时 要分开写 25 26 typedef struct node 27 { 28 int x; 29 int y; 30 int mn; 31 }node,node1,node2,*pnode; //可以在定义的同时取别名 并且可以合在一起取多个 32 33 34 //typedef struct node *pnode;//定义结构体指针类型的别名 35 typedef struct node node;//结构体类型别名 36 37 //struct strudent*p 结构体指针 类型 *指针名 38 void putstudent(struct student*p) //用函数打印结构体 要传送结构体的地址 39 { 40 printf("name:%s,sex:%c,age:%d,id:%s", (*p).name, p->sex, p->age, p->id); 41 //*的优先级低于.运算符 42 //->运算符 指针成员运算符 p->name 等价于(*p).name 效果一样 43 } 44 45 void test() 46 {//先定义类型 然后变量 47 node x;//x 48 x.mn = 2; 49 x.x = 2;//变量名和成员们可以一样 50 pnode p;//相当于node* 51 //node* p;//指针必须赋值才能用 52 p = &x; 53 p->x = 2; 54 55 } 56 57 58 59 int main() 60 { 61 //类型+变量名 62 struct student mark; //student 类型名 mark变量名 63 //结构体变量.成员 64 mark.age = 10;//使用.运算符 取得里面的成员 65 //mark.name = "张三";//name是字符数组 不能直接赋值 有一个函数可以对其赋值strcpy 循环 66 strcpy(mark.name, "mark");//赋值 67 68 struct student evan = {"even",'m',20,"20162003"};//定义的时候赋初值 69 //scanf("%s", evan.name); 70 //printf("name:%s,sex:%c,age:%d,id:%s", evan.name, evan.sex, evan.age, evan.id);//必须一个一个输出 71 putstudent(&evan); 72 mc danny; //用别名定义 73 size_t a;//这也是别名 74 75 //1.数组可不可以看成一个类型 76 typedef int arr[4];//定义一个一维数组类型 arr==> 就是int[4]类型的别名 77 arr arr[5];//即数组的数组 ====> int arr[5][4] 78 //int *p---->变量名去掉之后就是类型 79 //int arr[4] int[4]数组类型 80 //二维数组 数组的数组 81 82 getchar(); 83 return 0; 84 }
2019-03-21 19:11:55