数据结构 最慢一星期一章 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);
}