结构体_C
// Code file created by C Code Develop #include "ccd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
// 结构体
// 为了表达一个数据集
// 人的基本信息 姓名(字符串)、身高(整数)、体重(浮点数)等
// 因为数据要素的数据类型不同不能用一个数组来存放 // 使用结构体来存放一组不同数据类型的数据
/*
struct 结构体名
{
结构体成员变量1的声明;
结构体成员变量2的声明;
结构体成员变量3的声明;
。。。
};
*/ // 构造数据类型(定义数据类型)使用时需要 声明具体的变量(即定义变量名)
struct st_girl{
char name[51];
int age;
int height;
double weight;
}xx;
// xx是定义的结构体变量类似于int ii的ii,st_girl 是变量类型(类似于int) int main(int argc, char **argv)
{
//二、 结构体变量
/*结构体定义变量*/
struct st_girl queen, waiting; // 三、占用内存的情况
memset(&waiting, 0, sizeof(struct st_girl));
struct st_girl *workers = &waiting;
printf("sizeof(struct st_girl) %d\n", sizeof(struct st_girl));
printf("sizeof(xx) %d \n)", sizeof(xx) );
printf("sizeof(workers) %d \n)", sizeof(workers) );
printf("sizeof(*workers) %d \n)", sizeof(*workers) ); printf("\n\n" );
// 四、结构体的变量名
/*
结构体的变量名就是变量名,如int ii一样,但又不能直接输出,直接输出没有意义。
*/
struct st_girl stgirl;
// printf("stgirl:%p \n", stgirl); // 无意义,且会报错
printf("&stgirl:%p \n\n", &stgirl); // 五、结构体的初始化
memset(&queen, 0, sizeof(struct st_girl));
// 或 metset(queen,0,sizeof(queen)); // 结构体指针 存放传入的结构体地址
struct st_girl *pst = &queen;
printf("&queen:%p \n", &queen);
printf("pst:%p \n", pst); // 结构体存放的地址
printf("&pst:%p \n", &pst); //结构体的地址 // 指针变量的初始化
//错误做法。 sizeof(pst)得到的是结构体指针变量 占用内存的字节数
// memset(pst, 0, sizeof(pst));
//正确做法。得到结构体占用内存的字节数
memset(pst, 0, sizeof(struct stgirl)); // 六、成员的访问(结构体的使用)
/*圆点运算符 访问结构的成员,
结构体成员变量的使用与普通变量使用相同
*/ struct st_girl girl; //定义结构体变量
// 初始化结构体变量
memset(&girl, 0, sizeof(struct girl));
// 对结构体的每个成员变量赋值
strcpy(girl.name, "武则天");
girl.age = 380;
girl.height = 168;
girl.weight = 86.00;
printf("名字:%s \n", girl.name);
printf("结构体变量girl的地址:%p\n", &girl);
p_get_struct(&girl); // 怎么用函数传递结构体?//答:法一指针
c_get_struct(girl); //答:法二,整个结构体,开销较大
printf("\n\n"); // *七、结构体数组
/*结构体可以被定义成数组,
本质上与其他类型的数组变量没有区别
*/
struct st_girl princess[6];
memset(princess, 0, sizeof(struct st_gir) * 6);
// memset(princess, 0, sizeof(princess)); // 初始化第二种写法 printf("%d\n", sizeof(struct st_girl));
printf("%d\n\n\n", sizeof(princess));
//strcpy((princess[0].name, "杨玉环");
princess[0].age = 18;
strcpy(princess[1].name, "西施");
// 实际开发中不常用结构体数组,而常用vector容器 // 八、结构体指针
/*结构体是一种自定义的数据类型,
结构体变量是内存变量
有内存地址,也就有结构体指针
*/
struct st_girl queen1;
struct st_girl *pst1 = &queen1;
memset(pst1, 0, sizeof(*pst1));
// 定义成员变量时应注意
// 方法一 * . 星点法
strcpy((*pst1) .name, "林小涵");
// 原点的优先级高于 *
// 方法二. 箭头 ->
// 可以通过他直接使用结构体成员 pst1 -> age = 21;
printf("%s的年龄是:%d\n\n", (*pst1) .name, pst1 -> age); // 九、结构体的复制
// 内存拷贝 memcpy(). memory copy简写 可以复制任何内容、长度
// void *memcpy(void *dest, const void *src, size_t n);
/*参数说明:
src 源内存变量的起始地址。
dest 目的内存变量的起始地址。
n 需要复制内容的字节数。
函数返回指向dest的地址,函数的返回值意义不大,程序员一般不关心这个返回值。
*/
struct st_girl lxh;
memcpy(&lxh, &queen1, sizeof(struct st_girl));
lxh.age = 20;
// 查看复制后内存是否一致
printf("lxh.age:%d\n", lxh.age);
printf("queen1.age:%d\n", queen1.age);
//进一步探究,内存地址
printf("复制出来结构体lxh的地址: %p\n", & lxh);
printf("被复制的结构体queen1的地址:%p\n\n", &queen1); // 十、结构体作为函数的参数
// 见六 return 0;
} void p_get_struct(struct st_girl *c) {
// 传进来结构体变量的地址,减小开销
printf("年龄: % d\n", (*c) .age); //方法1、访问成员变量
printf("体重: % f\n", c -> weight); //方法2、访问成员变量
printf("指针存的地址: % p\n", c);
printf("------------------------\n");
}
void c_get_struct(struct st_girl c) {
// 传进来整个结构体,开销较大
printf("年龄: % d\n", c.age);
printf("体重: % f\n", c.weight);
printf("c的地址: % p\n", &c);
printf("------------------------\n");
}
结构体_C的更多相关文章
- 站在OC的基础上快速理解Swift的类与结构体
阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...
- C++进阶--结构体和类
// 单纯从语言上来说,两者唯一的区别是,默认成员是公有还是私有 // 从使用习惯上 // 小的消极对象,包含公有数据,没有或仅有很少的基本的成员函数 -- 数据容器 struct Person_t ...
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- go语言结构体
定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...
- C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
- C++_系列自学课程_第_12_课_结构体
#include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...
- java socket传送一个结构体给用C++编写的服务器解析的问题
另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- RuoYi(若依)前后端分离版本,windows下部署(nginx)
摘自:https://blog.csdn.net/yueyekkx/article/details/105505490 上一篇用了tomcat部署(https://blog.csdn.net/yuey ...
- linux下基于官方源码编译ipopt
linux下基于官方源码编译ipopt 1.C++依赖项安装升级 由于需要编译c++所以需要安装一系列的依赖: apt-get update apt-get -y upgrade apt instal ...
- kubernetes pod升级与回滚扩容与缩容
运行一个容器: apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revisio ...
- zabbix第一天 zabbix安装,添加监控项
1. zabbix 介绍 公司规模大,服务器众多,运维人员需要用到zabbix来监控整个服务器的运行状况,避免服务器故障后运维人员无法察觉. 清华zabbix源: https://mirrors.tu ...
- 8.24考试总结(NOIP模拟47)[Prime·Sequence·Omeed]
时间带着明显的恶意,缓缓在我的头顶流逝. T1 Prime 解题思路 成功没有签上到... 一看数据范围 \(R-L+1\le 10^7,R\le 10^{14}\) ,这肯定是判断范围内的数字是否可 ...
- 算法学习笔记(30):Kruskal 重构树
Kruskal 重构树 这是一种用于处理与最大/最小边权相关的一个数据结构. 其与 kruskal 做最小生成树的过程是类似的,我们考虑其过程: 按边权排序,利用并查集维护连通性,进行合并. 如果我们 ...
- work02
第一题: 看程序说答案 int a = 10; int b = 3; int c = a + b;//13 int d = a - b;//7 int e = a * b; //30 int f = ...
- javascript class 方法的this指向问题
踩坑记录 JavaScript 的 class 里面有两种定义方法的方式 普通函数(fun1) 箭头函数(fun2) class Obj { func1() { // write some code. ...
- .NET8操作Mysql,Pomelo.EntityFrameworkCore.MySql版本目前最高只有7.0解决办法
Pomelo.EntityFrameworkCore.MySql7.0是不支持.NET8的,但现在Pomelo.EntityFrameworkCore.MySql的最新版本只有7.0 因为 Pomel ...
- 随机二次元图片API第三弹
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 随机二次元图片API第三弹 日期:2020-3-10 阿珏 ...