c语言中指针指向的地址包含多少数据(字节,2字节),还是依赖于指向的数据类型?
答案 0 :(得分:2)
我不完全确定你的意思"指针指向的地址"。我假设你指的是它指向的对象,而不是指针本身的大小。
您的问题的答案可能取决于您的意思"地址"。
C指针值不仅仅是原始内存地址(尽管它通常以这种方式实现)。指针值指的是特定类型的对象,该类型指定指向对象的大小。并且C标准相当一致地使用"地址"引用(非空)C指针值。
另一方面,单词"地址"通常用于指代原始内存地址,可以被认为指向单个字节。但另一方面,即使在机器代码级别上,地址所指的数据大小也取决于您使用它做什么。 (我甚至在机器地址只能指向64位字的系统上工作;字节操作完全由软件完成。)
类型为int*
的指针指向int
个对象。根据定义,该对象的大小为sizeof (int)
字节(通常为4个字节,但如果一个字节至少为16位,则可以是8,或2,甚至1)。类似地,类型struct foo*
的指针指向struct foo
对象,该对象可以是任意大小。
int*
指针并不指向int
对象的第一个字节,它指向整个int
对象。 (但如果将int*
指针转换为char*
,结果将指向"第一个"字节。)
作为一种特殊情况,类型void*
的指针指向内存中的某个位置,但不指定它指向的对象的大小。在将其转换为其他指针类型之前,您无法取消引用它。
推荐阅读:comp.lang.c FAQ的第4部分。
答案 1 :(得分:1)
这是一个非常哲学的问题,让我给你三个完全不相容的答案:
虽然我认为所有三个答案在技术上都是正确的,但第二个答案是在C语言编程时使用的。
修改强>
详细说明"地址"可以,可能或应该,请在下面的评论中查看@ KeithThompson的输入!