// 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的更多相关文章

  1. 站在OC的基础上快速理解Swift的类与结构体

    阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...

  2. C++进阶--结构体和类

    // 单纯从语言上来说,两者唯一的区别是,默认成员是公有还是私有 // 从使用习惯上 // 小的消极对象,包含公有数据,没有或仅有很少的基本的成员函数 -- 数据容器 struct Person_t ...

  3. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  4. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  5. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  6. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  7. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  8. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  9. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  10. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. Java 创建/识别条形码

    项目刚好需要用到就记录一下 -- 依赖 <!-- 条形码生成 --><dependency> <groupId>net.sf.barcode4j</group ...

  2. .net Mvc5Webapi接口接收参数为null的一种情况分享

    同样的前后端项目,其他接口用post接收自定义对象形式的参数,是能成功接收的.在这个前提下,出现某个接口接收的参数为null或值全是默认值,可能的原因是这样: 前端定义的参数的字段比后台定义的dto对 ...

  3. .NETCore Nuget 发布包含静态文件 content file

    .NETCore 在.csproj引用资源中标记pack配置 <pack>true</pack>1例如 <ItemGroup> <Content Includ ...

  4. C#调用微软api文本转语音

    目录 1.注册微软云服务,搭建文本转语音标准应用(每月500万字免费好像) 2.Visual studio使用nuget给程序安装Microsoft.CognitiveServices.Speech框 ...

  5. JS+DOM简要笔记

    js官方文档: https://www.w3school.com.cn/js/index.asp 简单理解:html是内容,css是控制样式,js是行为. 1,js弱类型特点 JavaScript 是 ...

  6. kubeadm部署高可用版Kubernetes1.21[基于centos7.6]

    1. 基础环境规划: 主机名 IP地址 节点说明 k8s-node01 192.168.1.154 node1节点 k8s-node02 192.168.1.155 node2节点 master01 ...

  7. 使用kubadm部署一套k8s学习平台环境

    使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...

  8. 微信小程序学习随笔

    scroll-view与view 要做出滚动视图的效果 <scroll-view> <view id="1">11</view> <vie ...

  9. MySQL 导出一条数据的插入语句

    1.MySQL 导出一条数据的插入语句的方法 在MySQL中,如果我们想要导出一条数据的插入语句,我们可以使用SELECT ... INTO OUTFILE语句(但这通常用于将整个表或查询结果导出到一 ...

  10. react类组件 组件传值

    class Cmp1 extends React.Component{ render(){ return ( <div>{ this.props.name } -- 我是一个类</d ...