程序/应用程序如何知道内存地址中的数据属于某种数据类型。
例如,假设有int a;
并假设变量a
存储在地址0x100
中。存储的信息在哪里,表示类型为int
?
答案 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程序过去链接,并且不需要在外面公开任何符号时,此数据不再存在。
数据类型与语言相关,当可执行文件准备就绪时,语言不再起作用,因为现在它都是内存和处理器。