在C中识别内存中值的数据类型?

时间:2012-03-18 19:40:30

标签: c types runtime-type

程序/应用程序如何知道内存地址中的数据属于某种数据类型。

例如,假设有int a;并假设变量a存储在地址0x100中。存储的信息在哪里,表示类型为int

5 个答案:

答案 0 :(得分:12)

在像C这样的语言中,信息总是以您解释数据的方式“存储” 。编译器添加了一些好处,它在某种程度上理解了变量的类型,并试图阻止那些没有意义的操作。

例如,假设您有位:0xFFFFFFFF。如果您将它们解释为“32b unsigned int”,您将获得4294967295。如果您将其解释为“32b signed int”,则会获得-1 (*)。如果你将它们解释为双重,那么上帝知道你会得到什么。

答案 1 :(得分:6)

无处,它只是由代码承担。

答案 2 :(得分:3)

C应用程序不存储类型信息。唯一的强制措施是如何使用数据。而且,在C中,滥用执法是一件非常简单的事情。

请考虑以下事项:

short s;
short *p = &s;
*(long*)p = 0;

此代码获取指向short变量的指针,然后写入该变量,就好像它是一个long。这会覆盖超出所用变量所拥有的内存,从而导致未定义的行为。

答案 3 :(得分:2)

不存储此信息。例如,你可以做像

这样的事情
int i=15;
char *p=(char*)&i;
char c=*p; //Now, c contain the first byte of 15, which may be 15 or 0

但除非你真的知道你做了什么,否则不要这样做。像这样的东西不小心是一种常见的错误方法。

答案 4 :(得分:1)

当C程序过去链接,并且不需要在外面公开任何符号时,此数据不再存在。

数据类型与语言相关,当可执行文件准备就绪时,语言不再起作用,因为现在它都是内存和处理器。