结构体初阶
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//struct B
//{
// char c;
// short s;
// double d;
//};
//struct Stu
//{
// //成员变量
// struct B sb;
// char name[20];//名字
// int age;//年龄
// char id[20];//学号
// //结构的成员可以是标量,数组,指针,甚至是其他结构体
//};
//struct Stu
//{
// //成员变量
// char name[20];//名字
// int age;//年龄
// char id[20];//学号
//
//} s1,s2;//s1和s2也是结构体变量
s1,s2是全局变量
//结构体传参的时候,要传结构体的地址
//void print1(struct Stu t)
//{
// printf("%c %d %lf %s %d %s\n", t.sb.c, t.sb.s, t.sb.d, t.name, t.age, t.id);
//}
//void print2(struct Stu* ps)
//{
// printf("%c %d %lf %s %d %s\n", ps->sb.c, ps->sb.s, ps->sb.d, ps->name, ps->age, ps->id);
//}
//void print3(struct Stu* ps)
//{
// printf("%c %d %lf %s %d %s\n", (*ps).sb.c, (*ps).sb.s, (*ps).sb.d, (*ps).name, (*ps).age, (*ps).id);
//}
//
//int main()
//{ //s是局部变量
// struct Stu s = { {'w',20,3.14},"何俊才",40,"20220507"};//对象//初始化
//
// //. -->
// //printf("%c\n", s.sb.c);
// //printf("%d\n", s.sb.s);
// //printf("%lf\n", s.sb.d);
// //printf("%d\n", s.age);
// //printf("%s\n", s.id);
// //printf("%s\n", s.name);
//
// //struct Stu* ps = &s;
// //printf("%c\n", (*ps).sb.c);
// //printf("%c\n", ps->sb.c);
//
// //写一个函数打印s的内容
// print1(s);//w 20 3.140000 何俊才 40 20220507 传值调用 空间和时间都有浪费
// print2(&s);//w 20 3.140000 何俊才 40 20220507 传址调用 传参效率高,只传了一个指针变量大小的空间
// print3(&s);//w 20 3.140000 何俊才 40 20220507
// return 0;
//}
//int Add(int x, int y)
//{
// int z = 0;
// z = x + y;
// return z;
//}
每一个函数的调用都会在内存的栈区上开辟一块空间!
//int main()
//{
// int a = 3;
// int b = 5;
// int c = 0;
// c = Add(a, b);//大部分编译器函数传参是从右往左传的,先传b,再传a
// //函数传参也叫压栈操作
// return 0;
//}
函数压栈图解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律