首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >结构体

结构体

作者头像
杨奉武
发布2018-04-18 11:10:26
1.4K0
发布2018-04-18 11:10:26
举报
文章被收录于专栏:知识分享知识分享

数据结构  最慢一星期一章   2015.10.5   一       20:33    

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

结构体定义并不是定义一个变量,而是定义了一种数据类型,这种类型是你定义的,它可以和语言本身所自有的简单数据类型一样使用(如 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 cc和struct 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 shu0,shu1,shu2,shu3。。。。。。。;//麻烦

接着来

数组形参

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

数组形参是个容易出问题的地方。因为对于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);

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档