定义结构体
从某种程度上来说,会不会用 struct,怎样用 struct 是区别一个开发人员是否具备
丰富开发经历的标志 !
#include <stdio.h>#include <stdlib.h>/*怎么区别自定义的struct,所以要加类名定义了一个数据类型 固定大小内存块的别名 还没有分配内存*/// 自定义类 有名结构体 Deskstruct Desk // 类名{float length;float width;float high;char mer;float price;};// 自定义类 有名结构体 Personstruct Person{float high;int weight;char sex;int age;float score[4];};// 无名结构体Citystruct{char *name;char *areaCode;} city; //定义了变量city/**1 有名结构体一次定义 多处使用,会带来新的命名2 无名结构体 定义类型的同时定义变量, 无名结构体不引入新的类型这两种方式 用的是偏少一些 多的还是别名结构体*/// 别名结构体typedef struct Student{char name[100];char sex;int age;}STU;int main() {// 自定义的类型struct Desk d; // 定义了变量 dstruct Person p; //定义了变量 pprintf("%p", &p);d.length = 10; //成员访问city.name = "ShangHai";printf("city.name = %s\n", city.name); //city.name = ShangHaiSTU s1;s1.age = 10;printf("s1.age=%d\n", s1.age);// 凡是基本类型 既可定义时初始化 也可以先定义 再赋值// 凡是构造类型 要么在定义时初始化, 不可以,先定义 再以初始化的方式初始化STU s2 = { "tom", 'x', 18 }; //初始化 注意 构造类型只能在定义时就要初始化printf("s2.name=%s\n", s2.name); // s2.name=tomSTU s3;strcpy(s3.name, "hello");// s3.name = "Hello"; name是数组的首地址 数组赋值需要下标才可以printf("s3.name=%s\n", s3.name); //s3.name=hello//以上都是成员式 下面演示指向式STU *ps = &s3; //指针初始化strcpy(ps->name, "World");ps->age = 20;printf("ps.name=%s\n", ps->name);printf("ps.age=%d\n", ps->age);system("pause");return;}
结构体元素做函数参数pk结构指针做函数参数
define _CRT_SECURE_NO_WARNINGS
include
include
include
/**
定义一个结构体类型
定义了一个数据类型。固定大小内存块的别名 还没有分配内存
类型的重定义 **/
//用类型定义变量的方法3种 typedef struct Teacher { char name[64]; int age; int id; }Teacher;
//2 struct Student { char name[64]; int age; }s1, s2; // 定义类型的同时 D
//3 struct { char name[64]; int age; int id; }s3, s4; // 匿名类型 定义变量
//初始化变量的三种方法 2 struct Student2 { char name[64]; int age; }s5 = { “aaa”,10 };
//初始化变量的三种方法 3 struct { char name[64]; int age; }s6 = { “aaa”,10 };
void struct1() {
//初始化变量的三种方法//struct Teacher t1;//告诉C编译器给我配分内存Teacher t1;//告诉C编译器给我配分内存 前面已经用typedef重定义了 所以struct可以去掉Teacher t2 = { "aaaa", 30, 01 };t1.age = 12; // t1. 操作符是干什么 有没有操作内存 -> 是寻址操作 计算 age 相对于 t1大变量的 偏移量 ===》计算 cpu中进行 没有操作操作内存//通过指针操作的方式 操作 内存空间{Teacher *p = NULL;p = &t2;printf("p->age:%d\n", p->age); // 是寻址操作 计算 cpu中进行 没有操作操作内存}strcpy(t1.name, "t1name");printf("t1.name:%s \n", t1.name);return;
}
void copyTeacher(Teacher to, Teacher from) { to = from; // 这里不会改变实参 }
void copyTeacher2(Teacher to, Teacher from) { to = from; }
void main() {
// struct1();
Teacher t3 = { "Hello",18,22 };Teacher t4;Teacher t5;Teacher t6;memset(&t5, 0, sizeof(t5));t4 = t3;printf("t4.name:%s \n", t4.name); // helloprintf("t4.age:%d \n", t4.age); // 18printf("copyTeacher()\n\n");copyTeacher(t5, t3); // 形参不会改变实参printf("t5.name:%s \n", t5.name); // ''printf("t5.age:%d \n", t5.age); // 0printf("copyTeacher2()\n\n");copyTeacher2(&t6, &t3); // 形参会改变实参printf("t6.name:%s \n", t6.name); // helloprintf("t6.age:%d \n", t6.age); // 18system("pause");return;
}
