从C开始_结构体_把结构信息传递到函数中2

这里我们还是解决前面个的那个问题,不够完美吧结构的地址做参数看看。因为函数要处理funds结构所以它也要使用funds声明。

———————————————————————————————————————————————————

  #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", 
      3024.72, 
      "Lucky's Savings and Loan", 
      9237.11 
    }; 
    
    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 lotal of $12261.83 

sum()函数用一个指向fund结构的指针(money)作为他唯一的参数。吧地址&stan传递给改函数是指针money只想结构stan.然后,使用->运算符来获取stan.bankfund和stan.savefund的值,因为函数没有改变所指向的值的内容,所以他吧money声明为一个指向const的指针

索然我们没有这么使用名单上这个函数也可以访问结构的其他成员。注意,必须使用&运算符才能得到结构的地址,和数组名不一样,单独的结构名不是该结构地址的同义词

在Go调用C语言结构体数组,需要进行以下几个步骤: 1. 定义C语言结构体 首先,在Go程序定义一个C语言结构体。例如,如果我们要使用以下C语言结构体: ```c typedef struct { int id; char name[20]; float score; } Student; ``` 我们可以在Go程序定义如下: ```go type Student struct { id C.int name [20]C.char score C.float } ``` 注意,Go结构体成员类型必须与C语言的类型完全匹配,否则可能会发生未定义的行为。 2. 将结构体数组从Go传递给C函数 接下来,我们需要将Go结构体数组传递给C函数。假设我们要将一个包含3个学生信息结构体数组传递给C函数,我们可以使用CGo的方式实现: ```go // #include <stdio.h> // #include "student.h" import "C" func main() { // 定义并初始化学生信息 students := []Student{ {C.int(1), [20]C.char("Tom"), C.float(90.5)}, {C.int(2), [20]C.char("Jerry"), C.float(80.0)}, {C.int(3), [20]C.char("Bob"), C.float(70.0)}, } // 将Go结构体数组转换为C语言结构体数组 var cStudents []*C.Student for i := range students { cStudents = append(cStudents, (*C.Student)(&students[i])) } // 调用C函数,并传递结构体数组 C.print_students((*C.Student)(&cStudents[0]), C.int(len(students))) } ``` 其,`print_students`是C语言函数,用于输出学生信息,并声明在了`student.h`文件。 注意,在将Go结构体数组转换为C语言结构体数组时,需要使用指针类型,并使用`&`符号取地址。这是因为,C语言结构体数组是通过指针来传递的。 3. 在C函数处理结构体数组 最后,在C语言函数,我们可以按照C语言的方式处理结构体数组。例如,我们可以在`print_students`函数使用以下代码输出学生信息: ```c void print_students(Student *students, int count) { for (int i = 0; i < count; i++) { printf("ID: %d, Name: %s, Score: %.2f\n", students[i].id, students[i].name, students[i].score); } } ``` 这样,在Go程序调用`print_students`函数时,就可以输出学生信息了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值