gpt4 book ai didi

c - 从另一个头文件获取静态结构成员的地址

转载 作者:行者123 更新时间:2023-11-30 20:22:40 27 4
gpt4 key购买 nike

我在组合一些我希望具有以下内容的代码时遇到困难:

  • 有一个头文件myHeader.h我在其中创建了一个类型 struct myStruct与成员(member) int number1 , int number2int number3 。该文件还将包含一个“getter”原型(prototype),用于获取 struct 中每个成员的地址。实例。

  • 一个翻译单元 ( file.c ),我在其中声明 struct myStruct静态实例,即static struct myStruct myStructInstance 。这个翻译单元定义了“getter”函数(我将在文章末尾用代码示例进行说明)。

  • 另一个头文件anotherHeader.h我希望 - 现在这是一个棘手的问题,给我带来了问题 - 获取静态结构的每个成员的地址并将它们用于某些目的。

这是一个例子来展示我正在谈论的内容。

myHeader.h

struct myStruct{
int number1;
int number2;
int number3;
};

int* get_number1(void);
int* get_number2(void);
int* get_number3(void);

文件.c

#include <myHeader.h>

static struct myStruct myStructInstance = {
.number1 = 0,
.number2 = 0,
.number3 = 0
};

int* get_number1(void){
struct myStruct* ptr_myStructInstance = &(myStructInstance);
int* number1Address = &(ptr_myStructInstance->number1);
return number1Address;
}

int* get_number2(void){
struct myStruct* ptr_myStructInstance = &(myStructInstance);
int* number2Address = &(ptr_pfcVariables->number2);
return number2Address;
}

int* get_number3(void){
struct myStruct* ptr_myStructInstance = &(myStructInstance);
int* number3Address = &(ptr_myStructInstance->number3);
return number3Address;
}

anotherHeader.h

#include <myHeader.h>

int* pNumber1 = get_number1();

int* pNumber2 = get_number2();

int* pNumber3 = get_number3();

问题是上面显示的代码在 anotherHeader.h 中抛出“初始化元素不是常量”错误。我读过一些关于为什么在初始化具有静态存储持续时间的变量时不能使用非常量表达式的答案,但是我不明白这与我的代码有何关系。

最佳答案

I've read a few answers as to why we cannot use non-constant expressions when initializing variables with static storage duration, however I do not understand how this relates to my code.

函数调用是非常量表达式。

int* pNumber1 = get_number1();

上面的代码试图用非常量表达式初始化一个全局变量。

关于c - 从另一个头文件获取静态结构成员的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028901/

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