结构体

数据结构  最慢一星期一章   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  ",cc.cose);

 printf("%d  ",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  ",cc.cose);

 printf("%d  ",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  ",shu[0].price);

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

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

 printf("%d  ",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  ",a[0]);

 printf("%d  ",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  ",cc[0].price);

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

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

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

}

原文地址:https://www.cnblogs.com/yangfengwu/p/4858993.html