指向c中浮点的指针大小是否可能与指向int的指针不同?尝试过之后,我得到了各种指针的相同结果.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("sizeof(int*): %i\n", sizeof(int*));
printf("sizeof(float*): %i\n", sizeof(float*));
printf("sizeof(void*): %i\n", sizeof(void*));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里有哪些输出(OSX 10.6 64位)
sizeof(int*): 8
sizeof(float*): 8
sizeof(void*): 8
Run Code Online (Sandbox Code Playgroud)
我可以假设不同类型的指针具有相同的大小(当然在一个拱门上)?
Joh*_*ski 21
指针在同一个拱门上的大小并不总是相同.
您可以阅读更多关于"近","远"和"巨大"指针的概念,就像指针大小不同的情况一样...
http://en.wikipedia.org/wiki/Intel_Memory_Model#Pointer_sizes
Car*_*icz 12
在过去,使用DOS平台上如Borland的C编译器,总共有(我认为)5内存模型,其甚至可以混合在一定程度上是.从本质上讲,您可以选择指向数据的小型或大型指针,以及指向代码的小型或大型指针,以及"微型"模型,其中代码和数据具有共同的地址空间(如果我没记错的话)64K.
可以在程序中指定"巨大"指针,否则这些指针是在"微小"模型中构建的.因此,在最坏的情况下,可以在同一程序中使用不同大小的指针指向相同的数据类型!
我认为标准甚至不禁止这一点,所以从理论上讲,一个不起眼的C编译器甚至可以做到这一点.但毫无疑问,专家们将能够确认或纠正这一点.
指向数据的指针必须始终兼容,void*因此通常它们现在将被实现为相同宽度的类型.
对于函数指针,此语句不正确,它们可能具有不同的宽度.因此,在C99中,转换函数指针void*是未定义的行为.
是的。这是不常见的,但这肯定会发生在不可字节寻址的系统上。例如,具有 64 Kword = 128KB 内存的 16 位系统。在这样的系统上,您仍然可以拥有 16 位 int 指针。但是指向 8 位字符的字符指针需要一个额外的位来指示字内的高字节/低字节,因此您将拥有 17/32 位字符指针。
这听起来可能很奇怪,但许多 DSP 花费了 99.x% 的时间来执行专门的数字代码。如果一个声音 DSP 只需要处理 16 位数据,那么它可能会更简单一些,而让编译器模拟偶尔的 8 位数学运算。
据我所知,C标准中没有任何内容可以保证指向不同类型的指针必须具有相同的大小,因此理论上同一平台上的int*和float*可以是不同的大小而不会破坏任何规则.
需要char*和void*具有相同的表示和对齐要求,并且对于指针类型的不同子集存在各种其他类似的要求,但是没有任何内容包含所有内容.
在实践中,你不太可能遇到任何使用不同大小指针的实现,除非你进入一些相当模糊的地方.
Gis*_*shu -1
指针是一个内存地址 - 因此在特定机器上应该是相同的。32 位机器 => 4 字节,64 位 => 8 字节。
因此,无论指针所指向的数据类型如何,特定机器上的指针的大小都是相同的(因为存储内存地址所需的空间是相同的。)
假设:我正在谈论指向数据值的近指针,即您在问题中声明的类型。