为什么不同类型的指针用于c中的不同数据类型?

12 c

如果我们必须保存任何数据类型的地址,那么我们需要该数据类型的指针.但是指针只是一个地址,而地址总是int类型,那么为什么任何数据类型的保持地址都需要该类型的指针?

das*_*ght 17

有几个原因:

  • 并非所有地址都是平等的; 特别是,在非Von Neuman(例如Harvard)架构中,指向代码存储器的指针(通常存储常量)和指向数据存储器的指针是不同的.
  • 您需要知道基础类型才能正确执行访问.例如,阅读或写作char不同于阅读或写作double.
  • 您需要其他信息来执行指针运算.

请注意,有一个指针类型,在C中表示"只是一个指针",称为void*.您可以使用此指针在内存中传输地址,但是您需要将其转换为有用的内容,以便在指向的内存中执行操作void*.


Ana*_*ile 5

指针不只是int. 它们隐含地具有语义。

下面是几个例子:

  • p->member只有知道类型p指向什么才有意义。

  • p = p+1; 根据您指向的对象的大小,行为会有所不同(实际上,当将 'p' 视为无符号整数时,它会根据它指向的类型的大小递增)。