【发布时间】:2017-01-26 22:28:22
【问题描述】:
我试图在 C 中通过引用传递一个结构,以便我可以在函数内修改值。这是我到目前为止的代码,但它会产生一些警告和一个错误。
main.c
#include <stdio.h>
#include "myfunctions.h"
#include "structures.h"
int main(int argc, char const *argv[] {
struct MyStruct data;
data.value = 6;
printf("Before change: %d\n", data.value);
changeData(data);
printf("After change: %d\n", data.value);
}
myfunctions.c
#include "structures.h"
void changeData(MyStruct data) {
data.value = 7;
}
myfunctions.h
#ifndef MyStruct
#define MyStruct
void changeData(MyStruct data);
#endif
结构.h
typedef struct {
int value;
} MyStruct;
产生的错误
In file included from main.c:2:0:
myfunctions.h:4:1: warning: parameter names (without types) in function declaration
void changeData(MyStruct data);
^
In file included from main.c:3:0:
structures.h:5:1: warning: unnamed struct/union that defines no instances
} MyStruct;
^
main.c: In function ‘main’:
main.c:9:5: error: ‘data’ undeclared (first use in this function)
data.value = 6;
^
main.c:9:5: note: each undeclared identifier is reported only once for each function it appears in
【问题讨论】:
-
void changeData( MyStruct *data)和changeData(&data) -
如果你想传递一个指向结构的指针,你需要明确地这样做。
-
确保选中页面右侧的相关。您的标题出现了很多次。
-
仅供参考……C 中没有引用传递。C 完全是值传递。当您将指针传递给函数时,会在该函数中创建一个本地副本,并取消引用它指向与调用者中的指针相同的内存地址。
-
开始,这一行:
int main(int argc, char const *argv[] {缺少左括号)在左大括号'{'之前
标签: c struct pass-by-reference