如何从C中的函数返回指针?

时间:2016-04-26 11:22:43

标签: c function pointers struct

我有一个名为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;
}

2 个答案:

答案 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用于将变量范围保存在整个文件中...