gpt4 book ai didi

c - 如何将局部结构传递给函数?

转载 作者:行者123 更新时间:2023-11-30 19:54:53 24 4
gpt4 key购买 nike

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

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

where to declare structures, inside main() or outside 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;
}

最佳答案

首先,您应该真正使用与函数定义相匹配的正确原型(prototype)。

其次,您的示例确实将一个结构传递到函数中的局部变量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 函数之外,位于全局范围内。在结构体定义之后声明和定义的所有函数都可以使用该结构体及其成员。

关于c - 如何将局部结构传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51562965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com