首页 > 解决方案 > 如何将局部结构传递给函数?

问题描述

下面的链接说定义的结构main没有函数调用的范围,因为它们是本地的,所以你应该全局定义你的结构。但是对于变量,最好在本地声明变量并使用指针传递给函数,而不是声明全局变量。

有没有办法在纯 C 中使用指针等将 main 中定义的结构传递给函数?如果您不介意,请使用示例程序演示该方法。谢谢。

在 main() 内部还是 main() 外部声明结构?

这段代码有效,但不是我想要的。我想在main. 这可能吗?

#include <stdio.h>
#include <SDL2/SDL.h>

void function();

struct hexColour
    {
        Uint32 red;
    }hc;

int main(void)
{
    hc.red = 0xFFFF0000;
    function(hc);
    return 0;
}

void function(struct hexColour hc)
{
    printf("red is %x\n", hc.red);
}

我想要的是:

int main(void)
{
    struct hexColour
    {
        Uint32 red;
    }hc;
    hc.red = 0xFFFF0000;
    function(hc);
    return 0;
}

标签: cscopesdlpass-by-referencesdl-2

解决方案


首先,您应该真正使用与函数定义匹配的适当原型。

其次,您的示例确实将结构传递给函数中的局部变量hc

function运行时,内存中有两个不同且独立的结构:一个在main函数中,一个在function函数中。


为了涵盖我的基础,这里有两个可能被问到的另外两个问题的答案:

  1. 您想在main函数内部定义结构本身,然后能够在其他函数中使用它。

    就像是

    int main(void)
    {
        struct hexColor
        {
            uint32_t white;
            // Other members omitted
        };
    
        struct hexColour hc;
        hc.white = 0xff;
    
        func(hc);  // Assume declaration exist
    }
    
    void func(struct hexColour my_colour)
    {
        printf("White is %u\n", my_colour.white);
    }
    

    这是不可能的。该结构仅hexColour在函数内部定义main。没有其他函数可以使用该结构。不管你是否传递一个指针,结构hexColour仍然只存在于main函数内部。

  2. 通过传递指向结构对象的指针来模拟传递引用。像

    struct hexColor
    {
        uint32_t white;
        // Other members omitted
    };
    
    int main(void)
    {
        struct hexColour hc;
        hc.white = 0xff;
    
        // Assume declaration of function exists
        func(&hc);  // Emulate pass-by-reference by passing a pointer to a variable
    }
    
    void func(struct hexColour *colourPointer)
    {
        colourPointer->white = 0x00;
    }
    

    可能的,因为结构hexColour存在于main函数之外,在全局范围内。在结构定义之后声明和定义的所有函数都可以使用结构及其成员。


推荐阅读