A.对于结构体变量(即代码中Lnode类型),本身作为一个变量,就像是int a中的a变量,本身是具有内存空间的,该内存空间是用于存放该结构体成员的数值的。因此区别于结构体指针,结构体变量是不需要new申请内存空间的,可以直接用。
B.对于结构体指针(即代码中的LNODE类型),本身是作为一个指针,就像int *p中的p。首先作为指针变量,本身也是具有内存空间的,该内存空间是用于存放地址的。之所以能成为结构体指针是因为该指针是用于指向结构体变量的首地址的,结构体指针本身是不能存放结构体成员数值的。所以不能直接cin >> p->data。
C.对于二者关系,结构体指针可以指向结构体变量,如果没有结构体变量,则将结构体指针作为中介,new申请一段内存空间作为结构体变量并同时由结构体指针指向该变量。换句话说,在不用new申请空间的条件下,定义一定数量的结构体变量也是可以构成“链表”的,但是这就导致“链表”的长度是有限的,但是数据结构中链表之所以是链表是因为其可以动态申请内存空间,操作系统允许下可以无限制的加长链表
下面是个人部分调试代码以作佐证
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int data;
struct node *next;
}Lnode,*LNODE;
int main(){
Lnode head , ppp;
head.data = 3;
head.next = &ppp;
printf("A%d %d\n",head.data,head.next);
LNODE p;
// p = new Lnode;
cin >> p->data;
printf("p%d\n",p->data);
}