指向不同数据类型的指针为什么要定义不同的类型,指针存的不都是地址吗?
这就是*p的星号存在的意义
指针存的都是地址。这句话说的没错
但是你如果指针没有类型的话,只知道这个地址,那该用什么方式去解析这片内存呢?
不同的数据类型,对于同样的内存空间解读出来的信息是不同的
你可以去看看《C和指针》这本书,看过之后,相信你会对指针更加了解了
例如:
int key = 100;
int* p=&key;
// p存储的是key的地址, *p 指的是key的值,而key的值是int整形,所以你要指明*p的类型为int
指针长度都是一样的,因为存的是地址值,所以有时你会看到有时候会把指针做强置转换,
例如将 int * 类型转换为 void *类型。为什么定义不同的类型呢?
是因为指针只有地址信息,它不知道所指向的那个地方存放的是int值(占4个字节),还存放了long型的值(8字节),
所以需要按它所定义的类型来去取值(至少要知道取多少字节的数据吧)。