增加链表节点,用malloc函数开辟空间,为什么在malloc前面加(node*)而不是(node)。malloc返回的不就是个地址吗?
我觉得有点问题,就是地址是一个常量。把一个常量地址变成一个指针就好像把常量变成变量那种感觉。
我觉得这样解释不较好,malloc返回的是一个指向开辟内存空间首地址的void 类型的指针,然后把这个指针强制类型转换一下。
你觉得呢?
C语言的函数都是传值的。地址不是一个常量,它是一个值,可以是常量的值,也可以是变量的值。malloc返回的不是指向开辟内存空间首地址的void 类型的指针,而是开辟内存空间的首地址,只不过这个地址是void*类型的。一个常量或变量本身的类型不会被转换,而是它的值在传递的过程中被强制类型转换。
追问地址是一个值,怎么会是void *的类型的呢?一个是容器,存地址的。一个是地址。感觉void *是给容器的,而不是给地址的。
追答void*是一个类型,可以是变量或常量的类型,也可以是一个值的类型,比如int a是int类型的变量,而3是int类型的值(但当你在代码中直接写出3时会默认在内存中开辟一个常量空间来存放这个值)。一个变量或常量可以认为是一个容器,是一块内存空间,而任何值的本质都只是一串二进制数。那么一个P类型的容器A表示容器A只能存放P类型的值,而P类型的值B表示需要按照P类型的格式或方法去解释B这串二进制数。
追问明白了