c - 想要从C中的结构体内存中访问结构体指针类型的数据

标签 c pointers struct

我的程序动态分配结构指针类型的节点。我想通过它的内存地址访问结构指针的数据。我的问题的主要目的是测试带有分割的 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/

相关文章:

c - 当类型在 C 中未知时,如何打印参数的值?

java - 如何修复 fatal error jvmti.h No such file or directory compilation terminated c code ubuntu?

c++ - 具有不同类的类函数的函数指针数组

arrays - 使用结构体存储动态数据

c - 启用优化后 GCC 未报告结构存储大小错误

c - printf 的相同代码,不同的输出?

C:生成具有范围内随机数的数组(允许重复)

c++ - (OpenCV Stitching)如何使用 OpenCV Stitcher 类获得更好的性能?

c++ - 无法理解符号 : * and ** with pointers

c++ - vector 中的 push_back 是否在同一位置插入?