c语⾔结构体在函数中怎么⽤,C语⾔学习笔记:结构体在⾃定
义函数中的使⽤
0. 引⾔
众所周知,在C语⾔中如果希望设置的变量能够在⾃定义函数中使⽤且能够传递⾄⾃定义函数外使⽤,指针是最好的选择。
但是对于结构体,指针改怎么⽤呢?
1. 结构指针的声明
声明结构指针很简单,例如:
struct guy *him;
这个语法和其他指针声明⼀样。但是,该声明并未创建⼀个新的结构,⽽是指针him现在可以指向任意现有的guy类型的结构。例如,如果barney是⼀个guy类型的结构,可以这样写:
him = &barney;
自定义函数怎么用c语言和数组不同的是,结构名并不是结构的地址,因此要在结构名前加上&运算符。
2. ⽤指针访问成员
第⼀种表⽰⽅法也是最常⽤的⽅法,⽤->运算符:
如果him == &barney,那么him->income即是barney.income
另外,⾄于->与.的转换,在⼤部分的智能编译器⾥都可以⾃动转换。
这⾥着重理解him是⼀个指针,但是hime->income是该指针所指向结构的⼀个成员。因此在该例中,him->income是⼀个float类型的变量。
第⼆种表⽰⽅法为: c barney.income = (*him).income = him->imcome
3. 传递结构的地址
要解决我们开头的问题,我们必须传递结构的地址⽽不是结构,我们可以⽤下⾯的例⼦来介绍如何传递结构的地址:
#include
#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",
4032.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);
}
运⾏后该程序输出如下:
Stan has a total of $12576.21.
sum()函数使⽤指向funds结构的指针(money)作为它的参数。把地址 &stan传递给该函数,使得指针money指向结构stan。然后通过->运算符获取stan.bankfund和stan.savefund的值。由于该函数不能改变指针所指向值的内容,所以把money声明为⼀个指向const的指针。虽然该函数并未使⽤其他成员,但是也可以访问它们。
注意,必须使⽤&运算符来获取结构的地址。和数组名不同,结构名只是其地址的别名。
为了简化表⽰符号,我们可以直接定义如下:
typedef struct funds* funds_object;
4. 结构体的初始化
另外,必须要提醒的是,要想在⾃定义函数中正常地传递结构体地址,必须要对结构体先进⾏初始化,否则将会出现传递地址后⽆效的结果
参考⽂献
[1] Prata S. C primer plus[M]. Pearson Education, 2014.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论