当前位置: 首页 > news >正文

C语言基础-结构体

结构体类型的声明

结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

数组:一组相同类型元素的集合

结构体:其实是一组不一定相同类型元素的集合

//结构声明
// struct tag  //tag根据实际情况给名字
// {
//     member-list;   //成员列表(1个或者多个)
// }variable-list;//变量列表//描述一个学生
//名字+年龄+性别//声明结构体类型
// struct Stu
// {
//     //成员变量,是用来描述结构体对象的相关属性的
//     char name[20];
//     int age;
//     char sex[5]; //男 女 保密
// }; //s2,s3,s4;//s2,s3,s4就是结构体变量 - 全局变量// typedef struct Stu   //重命名
// {
//     //成员变量,是用来描述结构体对象的相关属性的
//     char name[20];
//     int age;
//     char sex[5]; //男 女 保密
// } Stu;// int main()
// {
//     struct Stu s1; //局部变量
//     //Stu s2; //在c语言中,没有对结构体类型typedef,struct关键字不能省略//     return 0;
// }

结构体初始化

//结构成员的类型
struct S
{int a;char arr[5];int* p;
}s1 = {100,"fan",NULL};//int n = 2023;
// struct S s2 = {98,"111",&n};
struct S s2 = {98,"111",NULL};struct B
{char arr[10];struct S s;double d;
};int main()
{struct S s3 = {.arr = "aaa", .a = 10, .p = NULL};//printf("%d %s %p\n",s1.a,s1.arr,s1.p); //结构成员访问操作符//printf("%d %s %p\n",s2.a,s2.arr,s2.p);//printf("%d %s %p\n",s3.a,s3.arr,s3.p);struct B b = {"hello",{20,"aaa",NULL},3.14};printf("%s %d %s %p %lf\n",b.arr, b.s.a, b.s.arr, b.s.p, b.d);return 0;
}

结构体成员访问

struct Stu
{/* data */char name[20];int age;
};// void set_stu(struct Stu* ps)
// {
//     (*ps).age = 20;
//     //t.name = "张三";  //err
//     strcpy((*ps).name,"张三");   //字符串拷贝
// }void set_stu(struct Stu* ps)
{ps->age = 20; //结构体成员访问操作符     结构体指针 -> 结构体成员//t.name = "张三";  //errstrcpy(ps->name,"张三");   //字符串拷贝
}void printf_stu(struct Stu t)
{printf("%s %d\n",t.name,t.age);
}int main()
{struct Stu s = {0};set_stu(&s); //传值调用printf_stu(s);return 0;
}

结构体传参

//结构体传参
struct S
{/* data */int data[1000];int num;
};struct S s = {{1,2,3,4},1000};
//结构体传参
void print1(struct S s)
{printf("%d\n",s.num);
}
//结构体地址传参
void print2(struct S* ps)
{printf("%d\n",ps->num);
}int main()
{print1(s); //传结构体print2(&s);//传地址return 0;
}
//结构体传参,尽量选用结构体地址传参

http://www.lryc.cn/news/174302.html

相关文章:

  • Codeforces Round 848 (Div. 2)C
  • 数据分发服务DDS
  • Linux 文件 目录管理 链接
  • R统计绘图-线性混合效应模型详解(理论、模型构建、检验、选择、方差分解及结果可视化)
  • 钾和钠含量
  • Linux离线安装elasticsearch|header|kibna插件最详细
  • 网络协议学习地图分享
  • nlohmann/json——NLOHMANN_JSON_SERIALIZE_ENUM
  • 类和对象:运算符重载
  • Vue中使用VueAMap
  • Vue中的路由介绍以及Node.js的使用
  • 将本地项目上传至Github详解
  • Vivado下PLL实验
  • 简单理解推挽输出和开漏输出
  • C++之va_start、vasprintf、va_end应用总结(二百二十六)
  • OpenCV自学笔记十一:形态学操作(一)
  • 封装全局异常处理
  • python的requests响应请求,结果乱码,即使设置了response.encoding也没有用的解决方法
  • PyCharm 手动下载插件
  • Gnomon绑定基础(约束 IK 节点)
  • STL常用遍历,查找,算法
  • BCC源码内容概览(1)
  • mysql限制用户登录失败次数,限制时间
  • 从利用Arthas排查线上Fastjson问题到Java动态字节码技术(下)
  • Ubuntu中安装Anaconda 如何将 路径导入为全局变量
  • 【QT】Qt的随身笔记(持续更新...)
  • 【LeetCode-简单题】589. N 叉树的前序遍历
  • Linphone3.5.2 ARM RV1109音视频对讲开发记录
  • Unity用相机实现的镜子效果
  • 计算机网络分类