首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将结构类型转换为固定大小数组的内存位置

将结构类型转换为固定大小数组的内存位置
EN

Stack Overflow用户
提问于 2013-12-09 05:47:57
回答 1查看 1.1K关注 0票数 0

对于将类型结构强制转换为固定大小数组中的某个内存位置,然后希望在用于结构的范围内访问特定的内存位置,我有点困惑。例如:

代码语言:javascript
复制
static char arraymemory[100];

struct header{ 
sruct header *previous, *successor; 
int isfree; 
int size; 
};

struct header *headerptr;

headerptr= (struct header*)((char*)p + sizeof(struct header));

其中p是类型为struct头的指针,指向数组的开头,而sizeof of ( struct头)是结构本身的字节计数加上成员。

因此,我进行了检查,而sizeof(struct头)是24个字节。现在我有了一个char数组,每个字符有一个字节,所以数组的100=size是1*。我获取位于数组开头的指针p,并将其移动24个字节(无论该内存位置是什么),这就是headerptr所指向的。如果我声明headerptr->isfree和headerptr ->大小等于某个值,同时让指针先前和后继保存一个内存位置,这是否意味着headerptr指向的位置最多可以在结构及其成员中使用24字节?

第二个问题,假设上面的答案是肯定的,如果我最终访问headerptr + 3的内存位置会发生什么?如果一个普通的char数据类型值(如'a‘)位于该特定的内存位置,则很容易看到输出,因为headerptr +2或headerptr +3会给您一个字节字符来读取。但是,如果您将整个范围用于结构并访问该集合的特定内存位置,那么它是如何工作的。你能接触到结构的一个成员吗?有些类型需要超过一个字节(Char),比如int,它需要4。假设成员是结构中声明的第一件事,并且是headerptr所指的第一件事,那么读取headerptr +3内存中的数据会给出什么信息呢?不考虑我们指向的4个字节中的值是空的?这对我来说很难想象,因为当我描绘char数组时,我只想到每个字符的一个单元格。如果我们有一个具有多个不同数据类型的结构,它为结构的每个成员占用多个单元格,并且我们指向特定的单元格,那么我们得到了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-10-26 08:06:59

您的问题只有在p充分对齐的情况下才是有意义的,如果p指向char数组的开头就不能保证这一点,所以让我们假设struct header *p = malloc(100); (如果分配成功时返回的指针适合于任何类型)。

但首先,你的帖子里有一种奇怪的措辞:

sizeof of ( struct头)是结构本身加上成员的字节计数。

结构本身已经包含了它的成员,所以加号成员没有意义。

如果我声明headerptr->isfree和headerptr ->大小等于某个值,同时让指针先前和后继保存一个内存位置,这是否意味着headerptr指向的位置最多可以在结构及其成员中使用24字节?

确切地说,它将是headerptr指向23个字节之后的字节,总计为24个字节。

如果我最终访问headerptr + 3的内存位置会发生什么?

由于headerptrstruct header *类型的,而从分配的内存开始时有24个字节,所以headerptr + 3是72字节之后,即从开始到96字节。现在发生的事情取决于您如何访问该位置。

如果一个普通的char数据类型值(如'a‘)位于该特定的内存位置,则很容易看到输出,因为headerptr +2或headerptr +3会给您一个字节字符来读取。但是,如果您将整个范围用于结构并访问该集合的特定内存位置,那么它是如何工作的。你能接触到结构的一个成员吗?

当您编写headerptr +3时,您似乎是指(char *)headerptr + 3;从现在开始,我将假设这一点。此外,只有使用unsigned char类型才能安全地访问大小大于1的对象的单个字节。这样,我们就可以访问一个struct成员的一个字节。

假设成员是在结构中声明的第一件事,并且是headerptr指向的第一件事,那么读取headerptr +3内存中的数据会给出什么信息呢?

然后,((unsigned char *)headerptr)[3]生成isfree的第四个字节的值,条件是sizeof isfree至少为4。

如果我们有一个具有多个不同数据类型的结构,它为结构的每个成员占用多个单元格,并且我们指向特定的单元格,那么我们得到了什么?

我们得到了所要求的-一个字节或单元或(单字节)字符,如上面的示例所示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20463964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档