gpt4 book ai didi

您可以使用指向包含结构的指针来修改嵌套结构的值吗?

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

我有一个关于 C 中结构行为的问题。

以给定的结构为例:

typedef struct {
char num1;
char num2;
} structa;

typedef struct {
structa innerstruct;
char num3;
char num4;
} structb;

我假设由于 structb 包含一个 structa 字段,而不是指向该字段的指针,因此 structb 将在内存中布局如下:

struct {
char num1; //innerstruct num1
char num2; //innerstruct num2
char num3; //num3
char num4; //num4
};

如果是这样,您可以像这样访问每个字段吗?

*(((char *)&structbvar) + 0) = 1; //innerstruct num1
*(((char *)&structbvar) + 1) = 2; //innerstruct num2
*(((char *)&structbvar) + 2) = 3; //num3
*(((char *)&structbvar) + 3) = 4; //num4

或者像这样访问它们?

((structa)structbvar).num1 = 1; //innerstruct num1
((structa)structbvar).num2 = 2; //innerstruct num2

无论这是否是不好的做法。

它可靠/便携吗?

<小时/>

编辑,正如 Matt McNabb 所指出的,你不能直接转换结构,所以它应该是:

((structa *)&structbvar)->num1 = 1; //innerstruct num1
((structa *)&structbvar)->num2 = 2; //innerstruct num2

最佳答案

*(char *) 版本定义明确,但您需要在 innerstruct 末尾和 num3 之前检查填充情况>.

(structa)structbvar 格式不正确。我认为 *(structa *)&structbvar 就可以了,因为关于具有共同初始序列的结构的规则(尽管我会仔细检查并更新我的答案)。然而,这有点毫无意义,因为你可以只写 structbvar.innerstruct

关于您可以使用指向包含结构的指针来修改嵌套结构的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454015/

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