我的程序动态分配结构指针类型的节点。我想通过它的内存地址访问结构指针的数据。我的问题的主要目的是测试带有分割的 B 树插入。这是结构:
struct LeafNode
{
int EmpID[M];
int Location[M];
int keys;
};
typedef struct LeafNode* LNodePtr;
这是我的测试代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int * a = (int *)malloc(sizeof(int));
*a = 5;
printf("int a created at %p\n", (void *) &a);
void * addr;
printf("Give the memory address: ");
scanf("%p", addr);
void * addr2 = (void *)addr;
printf("The value at memory is: %d\n",*(int*)addr2);
return 0;
}
结果如下:
int a 在 0xbff573b4 创建
给出内存地址:0xbff583b4
段错误
第二步是转换为 LNodePtr 而不是 int。我不知道我们是否可以使用双重 Actor ,即
*(int *(LNodePtr))addr
这样我就可以访问
struct's EmpID[0]
int
成员通过内存。感谢您的帮助。
最佳答案
void * addr;
分配一个指针,但不初始化它。
scanf("%p", addr);
将指针读入存储在addr
中保存的地址处的变量。您没有初始化addr
,因此这是未定义的行为。
也许你想写:
scanf("%p", &addr);
但这很难说。尤其是因为您详细讨论了 struct
,然后代码没有提及该结构,而是使用 void*
。
printf("int a created at %p\n", (void *) &a);
这会打印保存指针a
的变量的地址。如果要打印指针的值,请使用 a
而不是 &a
。
关于c - 想要从C中的结构体内存中访问结构体指针类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222392/