【发布时间】:2013-10-15 20:25:18
【问题描述】:
我在将结构指针传递给函数时遇到问题,我的代码(简单地说)是
struct userCom{
int x;
int y;
}
main(void){
struct userCom com;
userComFunction(com);
printf("%d", com.x);
}
userComFunction(struct userCom *return_type){
struct userCom temp;
temp.x = 10;
printf("%d", temp.x);
*return_type = temp;
}
它会打印出来
10
11537460
我通过指针错了吗? 我似乎无法弄清楚为什么 com.x 不等于 10
【问题讨论】:
-
需要将指针的引用传递过去。试试'userComFunction(&com)'
-
尝试在编译时启用所有警告(例如 gcc -Wall)。这应该指出问题所在。
-
顺便说一句,您缺少函数的返回类型。使用
gcc -Wall选项。 -
main(void)应该是int main(void)。userComFunction(/* ... */)应该是void userComFunction(/* ... */)。当你调用userComFunction(com)时,编译器不知道函数需要什么参数,因为它没有看到它的声明。从 C99 开始,缺少声明是非法的(违反约束);在 C90 中,编译器会对userComFunction的外观做出错误的假设。要解决这两个问题,请将userComFunction的定义移至main上方,或添加“转发”声明:void userComFunction(struct userCom *return_type);。