gpt4 book ai didi

c - 使用指针访问数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:00 26 4
gpt4 key购买 nike

我在一个项目中遇到了下面的代码片段,但不确定变量“response”的值是如何计算的。正如我们所见,pic_data 包含两个一维数组,但“response”将一维数组作为二维数组访问。谁能解释一下这是如何工作的?

注意:以下代码不是较大代码块的完整代码片段。

#define MAX 100
#define MAXBUF 100

u32 response;
u32 index;

typedef struct {
u16 flag;
u16 status;
} __attribute__ ((packed)) register;

typedef struct
{
register *rq[MAX];
u64 buf[MAXBUF];

}Data;

Data *pic_data;



void getres(Data *pic_data) {
response = *((u32*)&(pic_data->rq[index][pic_data->buf[index]]));
}

最佳答案

该行不是在访问二维数组,而是在访问一维指针数组,然后取消引用它得到的指针。

让我们把它分解成几个步骤。开始于:

response = *((u32*)&(pic_data->rq[index][pic_data->buf[index]]));

我们可以重写为:

register *r = pic_data->rq[index]; // figure out which element of 'rq' to use
u64 offset = pic_data->buf[index]; // figure out what offset to use from 'buf'
response = *(u32 *)&r[offset]; // get the right register and extract value
// into a 32-bit word

编辑说明:register 是一个保留字,不要将其用作类型名称。您的函数参数 pic_data 也隐藏了同名的全局变量。出门小心!

关于c - 使用指针访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18525745/

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