我有一个名为playerInformation
的结构,我想从我的C程序中的函数返回,下面的函数是我写的。
它找到了正确的结构,我可以使用printf
来打印函数中的细节。然而,似乎我无法返回指针,以便我可以在主函数中打印信息。
使用此代码我收到此警告:
MainTest.c: In function ‘main’:
MainTest.c:34: warning: assignment makes pointer from integer without a cast
MainTest.c(第33和34行)
struct playerInformation *test;
test = findPlayerInformation(head, 2);
StructFucntions.c
struct playerInformation *findPlayerInformation(struct playerInformation *head, int playerIndex) {
struct playerInformation *ptr;
for(ptr = head; ptr != NULL; ptr = ptr->next) {
if(ptr->playerIndex == playerIndex) {
return ptr;
}
}
return NULL;
}
答案 0 :(得分:1)
Put prototype before use. - BLUEPIXY
曾几何时,SO文档中的“从另一个C文件调用函数”主题涵盖了这个问题。
在此上下文中,您需要一个定义类型struct playerInformation
的标头:
<强> playerinfo.h
强>
#ifndef PLAYERINFO_H_INCLUDED
#define PLAYERINFO_H_INCLUDED
struct playerInformation
{
...
};
extern struct playerInformation *findPlayerInformation(struct playerInformation *head, int playerIndex);
#endif
structFunctions.c
中的代码应包含标题:
#include "playerinfo.h"
...
struct playerInformation *findPlayerInformation(struct playerInformation *head, int playerIndex) {
struct playerInformation *ptr;
for(ptr = head; ptr != NULL; ptr = ptr->next) {
if(ptr->playerIndex == playerIndex) {
return ptr;
}
}
return NULL;
}
主程序也包括标题:
<强> MainTest.c
强>
#include "playerinfo.h"
...
int main(void)
{
struct playerInformation *head = ...;
...
struct playerInformation *test;
test = findPlayerInformation(head, 2);
...
return 0;
}
答案 1 :(得分:-4)
您已声明struct playerInformation *ptr;
,此指针作为findPlayerInformation()
函数内的局部变量...因此上述指针的范围仅在findPlayerInformation()
函数中可用。
if(ptr->playerIndex == playerIndex)
return ptr;
因此在此声明之后,控制将转到main函数。由于您在ptr
函数中将findPlayerInformation()
声明为局部变量,因此您无法获得您在主函数中所期望的ptr
..
解决方案:
如果您想避免此问题,请将ptr声明为静态变量,如下所示
static struct playerInformation *ptr;
static keyword用于将变量范围保存在整个文件中...