StackOverflow的新手,C的新手。我试图将一个struct作为函数'add_fields'中的一个参数,它将前两个int字段'a'和'b'相加,并将结果放在int字段中'C'。没有得到编译器的任何东西,所以很明显我做错了。我只是不知道是什么。任何帮助,将不胜感激。
#include <stdio.h>
struct add{
int a;
int b;
int c;
}
void add_fields(struct add *d){
d->c = a + b;
}
main(){
struct add data;
data.a = 1;
data.b = 2;
data.c = 0;
add_fields(data);
printf("%d + %d = %d", data.a, data.b, data.c);
}
答案 0 :(得分:9)
你非常接近,但变量a
和b
在该上下文中不存在,而是需要通过指向struct d
的指针访问字段:
d->c = d->a + d->b;
其次,当你调用add_fields
时,你需要传递对结构的引用(因为add_fields
期望一个指针):
add_fields(&data);
&
表示您要传递变量data
的地址而不是值。
答案 1 :(得分:3)
以下是您更正后的代码:
#include <stdio.h>
struct add{
int a;
int b;
int c;
};
void add_fields(struct add *d){
d->c = d->a + d->b;
}
int main(){
struct add data;
data.a = 1;
data.b = 2;
data.c = 0;
add_fields(&data);
printf("%d + %d = %d", data.a, data.b, data.c);
return 0;
}
您在struct
定义后忘记了分号。
我必须修复你的add_fields
功能。您没有将struct
用于a
和b
。
您需要在函数调用中将指针传递给add_fields
(因此&
)。通过传入指针,add_fields
中的更改会反映在外部呼叫struct
上。
main
始终返回int
。
答案 2 :(得分:1)
有几个问题:
在main
中,data
的类型为struct add
。当您致电add_field
时,您需要传递struct add*
(即指向struct add
的指针)。要在data
中获取指向main
的指针,您需要使用&
运算符:
add_fields(&data);
在add_fields
中,您需要使用“成员访问语法”(->
)来访问a
和b
。
其他两个小问题:main
的返回类型应为int
:
int main() { ...
并且您需要在结构定义的结束}
之后放置分号。
答案 3 :(得分:0)
C是按值语言调用的。传递数据时,您将传递struct add类型的对象的副本。在add_fields字段中,您接受指向结构的指针。由于您想要更改结构的字段,您应该传递数据结构的地址(并在add_fields中接受指向它的指针)。为此,
add_fields,传入三个(安培;数据);
此外,在add_fields中,您没有未定义的变量(a和b)。我认为它们应该也来自结构体?
答案 4 :(得分:0)
您应该将结构的内存地址传递给add_fields函数。
add_fields(&data)
**哇我真的很慢这个:P