c语言中使用指针通过什么来实现的(指针-C语言的灵魂)(1)

前面我们提到指针变量中保存的就是内存地址,所以就会产生一种疑问,归根结底,指针就是地址,所以,指针类型和 int类型应该是一回事吧?看下面的代码:

c语言中使用指针通过什么来实现的(指针-C语言的灵魂)(2)

在32位系统下,程序也可以运行,因为32位系统中,C语言的int 型长度位4字节,指针类型的长度也是4字节,这样操作是没有问题的,但是在64位系统中,指针类型的长度是8个字节,int型的长度是4字节,所以就不能保证正确运行。还有一个问题:既然指针就是地址,那么,指向int的指针也好,指向 double的指针也好,它们有什么不一样吗?有必要去区分它们吗?对于大部分的运行环境来说,当程序运行时,不管是指向 int 的指针,还是指向 double的指针,都保持相同的表现形式。不仅如此,ANSI C 还为我们准备了“可以指向任何类型的指针类型”—— void*类型.下面这个程序是不会报错的

c语言中使用指针通过什么来实现的(指针-C语言的灵魂)(3)

因为 hoge_p 这个指针可以指向任何类型,但是如果像这样修改就会出问题。无法编译。

c语言中使用指针通过什么来实现的(指针-C语言的灵魂)(4)

,