怎样对结构体指针中的指针指向的变量进行赋值和输出

问题遇到的现象和发生背景

在做数据结构时遇到的问题

问题相关代码,请勿粘贴截图

代码:

#include <stdio.h>
typedef struct {
    int *p;
}Arr;
int main(){
    Arr *B;
    int *q;
    int b;
    B->p = &b;
    scanf("%d",&(*(B->p)));
    printf("%d",*(B->p));
}

运行结果及报错内容

结果:

C:\Users\86159\CLionProjects\untitled4\cmake-build-debug\untitled4.exe

Process finished with exit code -1073741819 (0xC0000005)
我想要达到的结果

对结构体指针中的指针指向的变量进行赋值和输出

你的B没有指向任何具体的Arr结构体,应该先有一个Arr的结构体实例,然后让B指向它

#include <stdio.h>
typedef struct {
    int* p;
}Arr;
int main() {
    Arr BB;
    Arr* B=&BB;
    int* q;
    int b;
    B->p = &b;
    scanf("%d", &(*(B->p)));
    printf("%d", *(B->p));
}

img


如图

img


其实问题在没有给结构体指针分配一个内存空间,
B是一个结构体指针,指向一个不知道指向谁的指针,俗称野指针,解决方法,要么先建立一个结构体变量,然后用结构体指针指向该变量,因为当建立结构体变量时候,系统会自动给结构体变量分配一个内存空间,自动分配内存的空间称为栈区,第二种方法动态分配内存空间,malloc,这种方法是在堆区分配空间,分配好空间后,通过结构体指针B找到该空间,发现该空间里面有一个int *类型的指针p,p也是一个野指针,然后通过p找到普通变量b,此时就可以通过scsnf和printf输入输出了