两个EdgeNode夹一个Node

在C中,各种类型的指针本身只是一个地址值,长度都是一样的。但是只知道地址值,你是没法确定往后多少bit是你真正有效的数据范围,所以指针就要加类型来确定往后取得范围。

所以你的struct里面那个嵌套的东西只是一个地址, 不是struct结构本身。到这里你的编译器是可以确认你整个结构体的大小的,你的例子中就是一个int,一个EdgeType,加一个地址的长度。

其实这个struct地址你甚至可以不用给确定类型,你里面声明一个void *也可以,只是用的时候再转型成EdgeNode也可以。

例如:下面的例子,两个EdgeNode夹一个Node(next项void*,未指定类型)大小是一样的,也可以连成 链表,由头节点可以访问next项,遍历整个链表

#include<stdio.h>
struct EdgeNode{
	int a;
	int b;
	struct EdgeNode *next;
};

struct Node{
	int a;
	int b;
	void *next;
};
int main()
{ struct EdgeNode node1;
  struct Node node2;
  //%u   无符号10进制整数 
  printf("%u==%u\n",sizeof(node1),sizeof(node2));
//创建链表节点,其中头尾是EdgeNode类型,中间body为Node类型,将3个节点连起来。 
   struct EdgeNode head,tail;
   struct Node body;
   tail.a=10;
   tail.b=20;
   body.a=40;
   body.b=50;
   
   head.next=(struct EdgeNode *)&body;
   body.next=&tail;
   tail.next=NULL;
   // 由头部遍历链表
  struct EdgeNode *p=head.next;
  printf("body:%d %d\n",p->a,p->b);
  printf("tail:%d %d\n",p->next->a,p->next->b);   
}

两个EdgeNode夹一个Node