分类: C/C++
2009-05-19 19:41:45
在C中,指针的大小是不是一样的,都为4字节??? 问题点数:10、回复次数:44
不一定
跟类型有关系 可以用sizeof 看看
double 就不是
int char等 是4
这个要看机器.32位机都是4个字节吧
可以用printf("%d",sizeof(某一个指针))来测试看看.
我这里 sizeof(double *)就是4
在32位机器中,指向double的指针本身应该也是4个字节吧.
指针的大小
要看指针的类型
其实和其他的数据一样
别忘了指针也是有类型 的 !!
楼主指的是指针本身的大小,不是说指针指向的变量的大小。
这个大小跟编译器及编译模式有关。vc下都是4个字节。
但tc下不同模式指针的大小不同,微型模式、小型模式、中型模式由于数据段只能在一个段里,所以指针的大小是2个字节。而紧凑模式、大型模式和巨型模式的数据段可以超越一个段,因而指针大小是4个字节。
32位机都是4.
指针指向内存区域,现在的x86体系的虚拟内存一般都是4G,也就是2的32次方,32位的指针可以覆盖所有的虚拟内存区域,所以一般是 4个字节
在现在所用的32位机下,不论指针指向的类型是什么,指针的大小都是4字节。就是int的长度。等明后年初了64位机后,大小就变唠
根据机器不同,大小是不一样的,但可以用sizeof来看的。
在windows95以上的机器都是4字节
以下的操作系统用2字节,long型指针4字节(2字节字段寄存器地址,2字节指针地址)
32位机就是4位.
晕,指针就是指针,哪分double不double
和机器有关,看它表示地址的位数
我 用vc调的 都是4个字节
我觉得 不同类型的指针 虽然 大小一样 但是 对内存的 格式解释是不一样的
反正指针大小和数据类型无关
与具体的机器平台有关,一般的32位平台下占4字节
这个与编译系统有关,c和vc就不同。
和具体的机器有关
应该是近指针两个字空间,而远指针4个字空间!
32位平台: 4
指针本身存的是一个地址,不同位数的CPU寻址长度不同所以指针本身大小为CPU位数/8
在 VC 下应该 全是 4吧..
和平台相关,32操作系统内存寻址空间2的32次方,因此指针对应的寻址大小应该对应
CPU是32位,内存是CPU能够直接访问的区域,CPU每次处理的数据也是32位,那CPU能够直接访问的内存大小就是2的32次方,也就是 4GB,所以一般我们实用的台式机大多数的内存上线都是4GB,一个地址是32位,任何指针都是一个地址,所以就是占用4BYTE(32位),在不同的硬 件平台上,指针变量占用的内存大小与其地址值的范围大小成正比
这么多人怎么给分呀!!
都给我算了,不用分了....................................
一句话,和编译器有关系
和编译器无关
32位平台都是4.
指针为地址,地址空间大小都一样(在同一平台下)为4
32位处理器上32位操作系统的32位编译器,指针大小4字节。(如Windows上0跑VC)
32位处理器上32位操作系统的16位编译器,指针大小2字节。(如Windows上跑古董Turbo C)
32位处理器上16位操作系统的16位编译器,指针大小2字节。(如DOS上跑Turbo C)
16位处理器上16位操作系统的16位编译器,指针大小2字节。(如DOS上跑Turbo C)
32位x86理器可寻址的范围是4GB,要想表示这么大的范围,指针的长度必须是4字节(32位),就是2的32次方。
32位的操作系统上应该是4字节的吧。
32BIT只要是指针变量都是4字节,包括指向结构的指针
指针变量的大小只与OS 有关,一般4BYTE
不是说指针制向的类型大小,2个是不同的
记住:指针就是一个地址。而一个机器的地址是由字长决定的。32位字长的,指针自然是用4个字节表示。16位机自然是2个字节表示。相应的SIZEOF也就是4和2。
至于指针的类型,只是在指针+ -运算时起作用。是关联到指向的内存解释方式而已。
指针的大小并不是以机器的字长来衡量的,16位机也有4个字节的指针的,而且还非常普遍。
ri, 到底谁说的真确
是啊!
一要看数据类型。
还要看机器位数~~~
首先澄清一点:指针就是地址。平常说的指针是指针变量,也就是说是指针类型的变量。
再换句更清楚的话说,就是这是一种特殊类型的变量,其中保存的是某些变量的地址而已。
指针是一中变量类型,叫做指针类型。
怎么会有不同的指针类型呢?
如:double * int *
这些东西只是告诉编译器是指针指向的变量的类型不同而已。
指针就是指针,不存在什么其他类型。
所以说指针变量到底多大,这个问题只跟寻址类型有关,和所指变量的类型无任何关系。
32为寻址的话,那其大小必然为4个字节,如果是16位寻址那肯定是2个字节。
刚才有位老兄说的tc下跟编译模式有关,也非常正确(个人见解)。
楼上的说法不太好。
虽然有些书的确说明指针就是地址,但这种说法不好,会造成进一步的混乱,举个例子:
对于int a[10]和int * const p来说,如果指针就是地址,那么a就应该叫指针常量,既然a是指针常量,那么p怎么说呢?难道叫指针变量常量?这显然让人摸不着头脑;难道就叫指针常量?但p跟a显然是两回事,不同的。
因此,把地址说明为指针只会引起更大的混乱。把指针的值说明为地址更好,而指针就叫地址变量,数组名a就叫地址常量,这更符合通常的习惯用法。
个人觉得这个只是个称呼问题而已!
说指针是地址,这只是给他起个名字而已,你想这么叫就这么叫。
但是我们都习惯了说指针就是指针变量,所以有些称呼叫起来就觉得有些别扭。
关键是明白其本质是最重要的!
指针表示一个地址值,用于存储并标志每一个内存单元地址。为了寻址32位机器的全部地址空间,则指针必须能表示0~(2^32-1)范围内的值,指针本身
大小则应不小于32(bit)/8(bit/byte)=4
byte。为了寻址更大的地址空间,指针本身需要能表示更大范围内的值。为了能够寻址64位机器地址空间,指针需要能表示0~(2^64-1)范围内的
值,指针本身大小则应不小于64(bit)/8(bit/byte)=8 byte。
看情况