// 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. 开源项目 cloud-platform 的本地部署

    F7 单步调试,进入函数内部 F8 单步调试,不进入函数内部 F9 继续执行,进入下一个断点或执行完程序 Shift+F7 选择要进入的函数 Shift+F8 跳出函数 Ctrl+F8 设置/取消当前 ...

  2. Windows Server系统 PaddleOCR失败解决方案

    因PaddleOCR引用了Opencv,在windows server 上 使用opencv出现 DLL load failed错误,发现缺失部分dll:MFPlat.dll.MF.dll.MFRea ...

  3. 一周万星的文本转语音开源项目「GitHub 热点速览」

    上周的热门开源项目让我想起了「图灵测试」,测试者在不知道对面是机器还是人类的前提下随意提问,最后根据对方回复的内容,判断与他们交谈的是人还是计算机.如果无法分辨出回答者是机器还是人类,则说明机器已通过 ...

  4. 震惊!docker镜像还有这些知识你都知道吗

    震惊!docker镜像还有这些知识你都知道吗? 镜像搜索 语法 [root@hmm docker-hello]# docker search -h Flag shorthand -h has been ...

  5. 什么是LAMP

    LAMP Lamp是一种互联网开发架构,全称为LAMP Stack(Linux.Apache.MySQL.PHP).它是一种流行的Web开发环境,用于构建动态网站和Web应用程序.LAMP Stack ...

  6. Java 集合的概念

    目录 集合 单列集合(Collection) Collection中的一些方法 public static < T > boolean addAll(Collection<? sup ...

  7. Java BigInteger类和BigDecimal()类

    BigInteger类 BigInteger 支持任意精度的整数,可以准确的表达任何大小的整数而不丢失精准度 BigInteger 位于 java.math包中 BigInteger()括号里必须是字 ...

  8. js整数类型

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  9. 滚动条小实验 BOM时间操作

      <div class="top">我是吸顶div</div>     <p class="back">返回顶部</ ...

  10. 前端传参中文需要utf-8转一下给后端

    const Msg = this.form.Msg.replace( (/%(u[0-9A-F]{4})|(%[0-9A-F]{2})/gm, $0 => { return escape($0) ...