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

结构体

数据结构  最慢一星期一章   2015.10.5   一       2033    

首先  我还不知道的一些基础知识

结构体定义并不是定义一个变量,而是定义了一种数据类型,这种类型是你定义的,它可以和语言本身所自有的简单数据类型一样使用(如 int )

函数参数是什么类型就传什么类型

/*

函数功能:定义一个结构体,在另一个函数中打印结构体成员的值;

函数形参为结构体变量的函数使用void qq(struct book cc);

*/

#include"stdio.h"

struct book     //定义一个名为book的结构体

{

 char name;

 int cose;

};

void qq(struct book cc);   //因为函数在主函数下面所以要声明一下函数

void main()

{

struct book one;       //定义一个结构体名为book的结构体变量one

one.cose=25;

one.name=10;

 qq(one);

}

void qq(struct book cc)   //打印函数

{

 printf("%d \r\n",cc.cose);

 printf("%d \r\n",cc.name);

}

有没有疑问为什么void qq(struct book cc) 里面的形参为struct book类型的参数,要和上面定义的结构体的类型一样 -struct book ccstruct book one; 

问一个问题如何把一个结构体的变量的成员的信息copy到另一个结构体变量?

#include"stdio.h"

struct book     //定义一个名为book的结构体

{

 char name;

 int cose;

};

void main()

{

struct book one;       //定义一个结构体名为book的结构体变量one

struct book cc;        //定义一个结构体名为book的结构体变量cc

one.cose=25; 

one.name=10;

 

cc=one;       //把变量one的成员copy到变量cc

printf("%d \r\n",cc.cose);

 printf("%d \r\n",cc.name);

 }

结构体变量为数组的结构体struct book shu[20];    //20本书 

 

/*

函数功能:结构体变量为数组的结构体

*/

/*

函数功能:结构体变量为数组的结构体

*/

#include"stdio.h"

struct book       //

{

 int price;     //书的价格

};

void main()

{

struct book shu[20];    //20本书 

shu[0].price=1;         //0的价格

shu[1].price=2;         //1的价格

shu[2].price=3;         //2的价格

shu[3].price=4;         //3的价格

 printf("%d \r\n",shu[0].price);

 printf("%d \r\n",shu[1].price);

 printf("%d \r\n",shu[2].price);

 printf("%d \r\n",shu[3].price);

}

如果不用数组呢

struct book shu0shu1shu2shu3。。。。。。。;//麻烦

接着来

数组形参

数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。

   数组形参是个容易出问题的地方。因为对于C/C++新手而言,最大的惊讶是C++中根本不存在所谓的“数组形参”,因为数组在传入时,实质上只传入指向其首元素的指针。--来源于网络

#include"stdio.h"

int aa[2]={0,1};

void test(int a[]); //形参为int*

void main()

{

 test(aa);

}

void test(int a[])

{

 printf("%d \r\n",a[0]);

 printf("%d \r\n",a[1]);

}

这种从数组到指针的自动转换被赋予了一个迷人的技术术语:“退化”,即数组退化成指向其首元素的指针。顺便提及,同样的事情也发生在函数上。一个函数型参数会退化成一个指针。不过,和数组退化时丢失边界不同,一个退化的函数具有良好的感知能力,可以保持其参数类型和返回类型。

由于在数组形参中数组边界被忽略了,因此通常在声明时最好将其省略。然而,如果函数期望接受一个指向一个元素序列(换句话说,就是数组)的指针作为参数,而不是指向单个对象的指针,那么最好这样声明:

void test(int a[]); // 形参a仍然是一个int*-----来源于网络

我也只是记下了就这样用,下面看结构体数组做函数参数

#include"stdio.h"

struct book       //

{

 int price;     //书的价格

};

void qq(struct book cc[]);

void main()

{

struct book shu[20];    //20本书 

shu[0].price=1;         //0的价格

shu[1].price=2;         //1的价格

shu[2].price=3;         //2的价格

shu[3].price=4;         //3的价格

 qq(shu);

}

void qq(struct book cc[])

{

 printf("%d \r\n",cc[0].price);

 printf("%d \r\n",cc[1].price);

 printf("%d \r\n",cc[2].price);

 printf("%d \r\n",cc[3].price);

}

相关文章:

  • zabbix vfs.fs.discovery过滤
  • 主键生成
  • RDVTabBarController--可自由定制的iOS底部导航控件
  • 智能园区报修系统可行性分析
  • 堆排序学习笔记及堆排序算法的python实现
  • Golang 并发简介
  • Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)
  • url 中文传参 乱码问题
  • Android签名机制
  • libsuperuser简介
  • Linux缓存释放
  • 从头开始编写项目Makefile(八):型号规则
  • STM32 ~ CH340在STM32实现一键下载电路
  • Python gui开发之tkinter
  • Java连接Oracle数据库简单实例
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android Volley源码解析
  • EOS是什么
  • in typeof instanceof ===这些运算符有什么作用
  • Java知识点总结(JavaIO-打印流)
  • php面试题 汇集2
  • Python_OOP
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue自定义指令实现v-tap插件
  • 力扣(LeetCode)56
  • 聊一聊前端的监控
  • 前端性能优化——回流与重绘
  • 前嗅ForeSpider中数据浏览界面介绍
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 通过几道题目学习二叉搜索树
  • 小李飞刀:SQL题目刷起来!
  • 源码安装memcached和php memcache扩展
  • Python 之网络式编程
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #ifdef 的技巧用法
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma预处理命令
  • #前后端分离# 头条发布系统
  • $(selector).each()和$.each()的区别
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (39)STM32——FLASH闪存
  • (day 12)JavaScript学习笔记(数组3)
  • (Git) gitignore基础使用
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一)kafka实战——kafka源码编译启动
  • (转)C#调用WebService 基础
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net Core和.Net Standard直观理解
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)