gpt4 book ai didi

c - 将地址分配给 C 中的结构数组

转载 作者:行者123 更新时间:2023-11-30 16:51:25 25 4
gpt4 key购买 nike

我一直试图弄清楚如何将地址分配给 C 中的结构数组,但取得了有限的成功。这是我的结构:

struct pdirectory {
uint16_t one;
uint8_t two;
uint8_t three;
uint16_t four;
};

这是我第一次尝试声明我的结构变量:

struct pdirectory *test = (struct pdirectory *)0x00001000;

效果很好,并将我的结构放置在预期的内存位置。
但是我无法成功地将地址分配给结构数组。
我厌倦了以下代码,但取得的成功有限:

struct pdirectory (*test)[1] = (struct pdirectory *)0x00001000;

这将我的结构放在预期的地址,我什至可以使用以下测试代码访问不同的数组:

void initialise_virtual_manager(){
test[0]->one = 0x3333;
test[0]->four = 0x3333;
test[1]->one = 0x3434;
test[1]->four = 0x3434;
test[2]->one = 0x3535;
test[2]->four = 0x3535;
}

我知道我上面的代码不正确。我厌倦了更改结构减速中的数组编号,该结构减速将内存中的数组条目偏移结构大小(这不是我打算做的)我想声明一个 1024 strut's 的数组。另外,通过上面的代码,我可以访问无限数量的数组(这不是我想要的,我希望数组编号限制我可以访问的数组数量)。如果有人能看到我做错了什么或者有任何其他建议来解决我遇到的这个问题,那将是一个很大的帮助。

最佳答案

首先,使用正确的转换,因为您似乎知道如何指向数组:

struct pdirectory (*test)[N] = (struct pdirectory (*)[N])0x00001000;

其次,test[i]将以数组大小为单位执行指针算术。如果数组的大小为 N,则数组访问将相当于:

*(struct pdirectory(*)[N])((unsigned char*)test + i * sizeof(struct pdirectory) * N)

正如您所看到的,上面的代码没有索引 test 指向的数组,而是将 test 视为数组。

因此,您的数组访问应如下所示:

(*test)[0].one  = 0x3333;
(*test)[0].four = 0x3333;

第一个 test 被取消引用,然后才对数组建立索引。

关于c - 将地址分配给 C 中的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788686/

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