c - 如何将局部结构传递给函数?
问题描述
下面的链接说定义的结构main
没有函数调用的范围,因为它们是本地的,所以你应该全局定义你的结构。但是对于变量,最好在本地声明变量并使用指针传递给函数,而不是声明全局变量。
有没有办法在纯 C 中使用指针等将 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;
}
解决方案
首先,您应该真正使用与函数定义匹配的适当原型。
其次,您的示例确实将结构传递给函数中的局部变量hc
。
当function
运行时,内存中有两个不同且独立的结构:一个在main
函数中,一个在function
函数中。
为了涵盖我的基础,这里有两个可能被问到的另外两个问题的答案:
您想在
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
函数内部。通过传递指向结构对象的指针来模拟传递引用。像
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
函数之外,在全局范围内。在结构定义之后声明和定义的所有函数都可以使用结构及其成员。
推荐阅读
- python - Django视图混乱,两个视图显示相同的内容
- github-api - Github API /用户标识符属性
- linux - 从“dd”恢复备份(softRAID HDD 可能有问题)
- ruby-on-rails - Sidekiq 在使用多个队列时忽略并发性
- pandas - 将具有远期日期的 CSV 解析为 Parquet
- javascript - Javascript构建动态多维数组
- html - 框转换不会响应 :hover
- arrays - React Native - 无法从 json 文件中的 Array 中访问 Array 中的数据
- javascript - 有条件地渲染属性对象值?
- android - Android的DisplayMetrics的heightpixels是否考虑了状态栏和软导航栏?