关于单链表C语言实现的一些疑惑
来源:互联网 发布:python 累计分布函数 编辑:程序博客网 时间:2024/06/06 09:41
单链表的C语言实现如下:
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next;//结点的指针域
}ListNode;
即定义了一个结构体 node,将他重新命名为ListNode~
我的疑惑是,结构体名为 node,但是在结构体的定义中,居然还有一个 node 类型的变量,
相当于在类MyClass中定义一个MyClass类型的私有成员变量~~这点让我很费解,后来才明白,这两者关系其实是不一样的
具体解释
解释一:
struct MyClass
{
int a;
MyClass *p
}
不管什么类型的指针,在32位程序里面都是32位四个字节。
所以说这个MyClass已经很明确了,总共8个字节,完全有意义啊。
struct
MyClass;
void
main()
{
MyClass *p = 0;
}
就像这段代码完全合法一样,MyClass具体是什么都不知道,但仍然可以使用它的指针,因为不管它是什么类型的指针,都是四个字节,都是一样的
解释二:
你只要记住一点,编译器很聪明,能够明白你这段代码代表什么意思,就够了,如果再要深究,就只能研究编译原理了。
编译器先看到你定义了结构,然后看见你在这个结构体中又使用了这个结构,因为编译器已经知道这是一个结构体,所以他可以处理这种情况。如果你把结构中的struct node *next; 这一句,替换成}ListNode *next; 编译器就会报错,因为他还没有看见过这个ListNode是什么东西。
另外,你不能在你的结构体中,再定义一个非指针类型的同样的结构体,例如struct node next;(注意,没有星号),这时,编译器也应该报错,为什么,因为这会导致定义的无限延伸!也就是说,这个定义是一个死循环,永远停不下来。
所以说,链表的C语言实现中,之所以能这样使用,是因为里面的那个变量时指针,而指针所占的字节数是已知的(不管什么类型指针,在32位操作系统中,都是占 4 个字节)
- 关于单链表C语言实现的一些疑惑
- c语言关于for()的疑惑
- C语言中I/O流的一些疑惑
- java语言的一些疑惑
- 关于NAT的一些疑惑
- 关于UWP的一些疑惑
- 关于Service的一些疑惑。
- 关于C语言define定义常量的疑惑
- C语言中关于return 语句使用的疑惑
- C 关于指针的疑惑
- 关于IBM federation server的一些疑惑
- 关于IBM federation server的一些疑惑
- 关于自绘CListBox的一些疑惑
- 关于python的一些想法和疑惑
- 关于switch cas 的一些疑惑解答
- 关于Marching Cube的一些疑惑思考
- 关于多线程共享数据的一些疑惑
- 关于Unity中的_MainTex_ST的一些疑惑
- iOS相册多选照片
- MySQl备份恢复策略(完全+增量备份策略)
- 显示调用和隐式调用
- 关于树莓的交叉编译[备忘]
- Android 升级版本 如何保存旧数据
- 关于单链表C语言实现的一些疑惑
- 构造与析构的次序
- Caused by: java.lang.ClassNotFoundException: Didn't find class "com.***.client.v1.Mai
- 分支-06. 成绩转换(15)
- 特殊的线性表-队列-链队列
- substringFromIndex,substringWithRange,substringToIndex
- 黑马程序员_Java高薪技术1
- linux编程--shell01
- AMPL简介