最开始学习的时候事实上老师也说过,结构体可以当作特殊的数据类型进行处理。当然那个时候大多数情况下是不会在意这样的内容导致一直理解不清楚这个结构体到底是什么。
我们就先来声明一个结构体好了
这个结构体叫name,它包含fname(first name),lname(last name),
一个letters(计算name总长度用的)。
我们经常看到的形式是这样的
#define NLEN 30
struct namect {
char fname[NLEN];
char lname[NLEN];
int letters;
}person,*per;
我就经常被这种形式劝退,但事实上他和如下的形式一样。就计算机而言二者没区别。
#define NLEN 30
struct namect {
char fname[NLEN];
char lname[NLEN];
int letters;
};
struct namect person,*per;
这和我们经常用的
int a,b;
这样的形式很相近,由此就能理解我说的结构体就是特殊的数据类型了吧。
接下来我贴两个完整的代码,我们来感受一下使用指针的结构体和不使用指针的结构体的区别。
指针构造
#include <stdio.h>
#define FUNDLEN 50
struct funds
{
char bank[FUNDLEN];
double bankfund;
char save[FUNDLEN];
double savefund;
};
double sum(const struct funds *);/*参数是一个指针*/
int main(void) {
struct funds stan=
{
"garlic-melon bank",
4023.27,
"lucky's savings and loan",
8543.94
};
printf("Stan has a total of $%.2f.\n", sum(&stan));
return 0;
}
double sum(const struct funds *money) {
return money->bankfund+money->savefund;
}
它的不是指针的写法:
#include <stdio.h>
#define FUNDLEN 50
struct funds
{
char bank[FUNDLEN];
double bankfund;
char save[FUNDLEN];
double savefund;
};
double sum(double a,double b);/*参数是一个指针*/
int main(void) {
struct funds stan=
{
"garlic-melon bank",
4023.27,
"lucky's savings and loan",
8543.94
};
printf("Stan has a total of $%.2f.\n", sum(stan.bankfund,stan.savefund));
return 0;
}
double sum(double a,double b) {
return a + b;
}
我们从上面看到的就是两种不同的写法。
相信大家都能理解第二种写法,我们具体解析一下第一种写法
double sum(const struct funds *money) {
return money->bankfund+money->savefund;
}
//首先是这个方法,这个方法的参数是结构体funds的指针
//这个指针对应的值就是我们结构体中定义的两周值,bankfund,savefund.
//接下来我们再回到main函数当中
printf("Stan has a total of $%.2f.\n", sum(&stan));
//我们做的操作就是将stan这个结构体的地址给了我们的money指针
//这样我们就能在sum方法中找到stan对应的值。
以上