gpt4 book ai didi

c - 通过指向指针结构的指针访问内存

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

假设我有 N 字节的连续内存:

char A[N];

| | | | | | | | | | | | | | | | | | | |

我想像这样访问内存:

|__ _|__ _| | | | | | | | | | | | | | |

前两个 block 为 4 字节长,其余为 1 字节长。我想创建一个基于该内存的结构,以便以这种方式轻松访问内存。

我尝试了这种方法,但不起作用:

typedef struct {
int *a,*b;
char *c;
} mem;

mem *p;
p->a=(int*)A;
p->b=((int*)A+1);
p->c=((int*)A+2);

mem *p
p=(mem*)A;

然后使用 *(p->a)*(p->b)*(p->c)< 访问元素.

您能否建议我一种正确的方法并向我解释为什么这不起作用?

最佳答案

你应该能够这样做:

int* a;
int* b;
char* c;
char A[N] = {/* data goes here */};

a = (int*)A;
b = (int*)(A+sizeof(int));
c = A + 2*sizeof(int);

但是请注意,像这样的不同整数类型之间的类型转换在 C 中并不是明确定义的行为。代码很容易受到字节顺序的影响,无法确定有符号位将在哪里结束,这都可能导致陷阱表示等。

因此,除非您的特定编译器保证结果是什么,否则代码可能会变得困惑。当然它也是不可移植的。

编辑:请注意,上面的方法比使用结构指针更便携,尽管结构指针看起来更优雅。因为结构体可能在任何地方包含任意数量的填充字节,所以不能保证结构体指针会意识到所指向的内存是相邻分配的。

关于c - 通过指向指针结构的指针访问内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429222/

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