Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485328
  • 博文数量: 148
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1553
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-23 23:09
文章分类

全部博文(148)

文章存档

2010年(6)

2009年(58)

2008年(84)

我的朋友

分类: C/C++

2009-05-19 19:41:45

在C中,指针的大小是不是一样的,都为4字节??? 问题点数:10、回复次数:44

windking21(想玩玩WOW 真的那么难吗)回复于 2005-08-02 09:23:27 得分 0

不一定  
   
  跟类型有关系   可以用sizeof   看看  
  double   就不是    
  int   char等   是4

zxq2003tt(小朱)回复于 2005-08-02 09:25:15 得分 0

这个要看机器.32位机都是4个字节吧  
  可以用printf("%d",sizeof(某一个指针))来测试看看.

XBox360(菜)(鸟)回复于 2005-08-02 09:28:28 得分 0

我这里   sizeof(double   *)就是4

zxq2003tt(小朱)回复于 2005-08-02 09:30:00 得分 0

在32位机器中,指向double的指针本身应该也是4个字节吧.

jixingzhong(瞌睡虫·星辰)回复于 2005-08-02 09:35:18 得分 0

指针的大小  
   
   
  要看指针的类型  
   
   
   
  其实和其他的数据一样  
   
  别忘了指针也是有类型   的   !!

megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-02 09:37:43 得分 4

楼主指的是指针本身的大小,不是说指针指向的变量的大小。  
   
  这个大小跟编译器及编译模式有关。vc下都是4个字节。  
   
  但tc下不同模式指针的大小不同,微型模式、小型模式、中型模式由于数据段只能在一个段里,所以指针的大小是2个字节。而紧凑模式、大型模式和巨型模式的数据段可以超越一个段,因而指针大小是4个字节。

xuanwenchao(xuanwenchao)回复于 2005-08-02 09:38:29 得分 0

32位机都是4.

zidane_yubo(天涯独尊)回复于 2005-08-02 10:07:27 得分 4

指针指向内存区域,现在的x86体系的虚拟内存一般都是4G,也就是2的32次方,32位的指针可以覆盖所有的虚拟内存区域,所以一般是   4个字节

redspider9999(亢龙有悔)回复于 2005-08-02 11:25:13 得分 0

在现在所用的32位机下,不论指针指向的类型是什么,指针的大小都是4字节。就是int的长度。等明后年初了64位机后,大小就变唠

mostideal(三甲)回复于 2005-08-02 11:54:47 得分 0

根据机器不同,大小是不一样的,但可以用sizeof来看的。

VxD1(Dump)回复于 2005-08-02 18:56:09 得分 0

在windows95以上的机器都是4字节  
  以下的操作系统用2字节,long型指针4字节(2字节字段寄存器地址,2字节指针地址)

gogdo(草草)回复于 2005-08-02 19:26:22 得分 0

32位机就是4位.

jxhwei(工羊大盗)回复于 2005-08-02 20:34:39 得分 0

晕,指针就是指针,哪分double不double

JackyRao(一儿)回复于 2005-08-03 00:16:03 得分 0

和机器有关,看它表示地址的位数

apollon_hhy(一天五十页!)回复于 2005-08-03 02:07:20 得分 0

我   用vc调的     都是4个字节  
  我觉得   不同类型的指针   虽然   大小一样   但是   对内存的   格式解释是不一样的

yanddan(索尔)回复于 2005-08-03 06:13:32 得分 0

反正指针大小和数据类型无关

xjp6688(大平/要做必须最好)回复于 2005-08-03 07:29:18 得分 0

与具体的机器平台有关,一般的32位平台下占4字节

jianchidaodihahaha(水疑)回复于 2005-08-07 23:16:25 得分 0

这个与编译系统有关,c和vc就不同。

Goldrush(上天有好生之德)回复于 2005-08-08 00:04:46 得分 0

和具体的机器有关

sunlu_eric(天使预备役)回复于 2005-08-08 10:42:55 得分 0

应该是近指针两个字空间,而远指针4个字空间!

pgh(crocodile)回复于 2005-08-08 11:18:46 得分 0

32位平台:   4

Kenmark(fenix)回复于 2005-08-08 11:24:11 得分 0

指针本身存的是一个地址,不同位数的CPU寻址长度不同所以指针本身大小为CPU位数/8

ruiding(瑞丁)回复于 2005-08-08 11:36:31 得分 0

在     VC     下应该     全是       4吧..

hjf1010(黑色狂人)回复于 2005-08-08 11:41:18 得分 0

和平台相关,32操作系统内存寻址空间2的32次方,因此指针对应的寻址大小应该对应

softstarxy(逍遥)回复于 2005-08-08 12:17:06 得分 0

CPU是32位,内存是CPU能够直接访问的区域,CPU每次处理的数据也是32位,那CPU能够直接访问的内存大小就是2的32次方,也就是 4GB,所以一般我们实用的台式机大多数的内存上线都是4GB,一个地址是32位,任何指针都是一个地址,所以就是占用4BYTE(32位),在不同的硬 件平台上,指针变量占用的内存大小与其地址值的范围大小成正比

jessinio(喜)回复于 2005-08-08 21:14:42 得分 0

这么多人怎么给分呀!!

51365133(渊海)回复于 2005-08-09 16:37:25 得分 0

都给我算了,不用分了....................................

kingofghost(孤魂野鬼)回复于 2005-08-09 22:02:25 得分 0

一句话,和编译器有关系

liuhaimiao()回复于 2005-08-10 13:19:27 得分 0

和编译器无关  
  32位平台都是4.

chshjking( 金少)回复于 2005-08-10 15:50:03 得分 0

指针为地址,地址空间大小都一样(在同一平台下)为4  
 

liubingqian(海风)回复于 2005-08-11 09:29:14 得分 2

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次方。

homtipo()回复于 2005-08-11 09:32:15 得分 0

32位的操作系统上应该是4字节的吧。

ywchen2000(灌水大帝:努力奋斗)回复于 2005-08-11 15:20:25 得分 0

32BIT只要是指针变量都是4字节,包括指向结构的指针

Baku(计算机上的白痴)回复于 2005-08-11 15:37:05 得分 0

指针变量的大小只与OS   有关,一般4BYTE    
  不是说指针制向的类型大小,2个是不同的

ccchhhhhh(一劳永逸)回复于 2005-08-11 16:30:02 得分 0

记住:指针就是一个地址。而一个机器的地址是由字长决定的。32位字长的,指针自然是用4个字节表示。16位机自然是2个字节表示。相应的SIZEOF也就是4和2。  
  至于指针的类型,只是在指针+   -运算时起作用。是关联到指向的内存解释方式而已。

megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-11 16:55:26 得分 0

指针的大小并不是以机器的字长来衡量的,16位机也有4个字节的指针的,而且还非常普遍。

yanyiyun(努力做中国人的游戏)回复于 2005-08-12 10:04:11 得分 0

ri,   到底谁说的真确  
 

snowbirdfly(专心搞好嵌入式~~~)回复于 2005-08-12 12:12:18 得分 0

是啊!  
  一要看数据类型。  
  还要看机器位数~~~

hejiwangbaggio()回复于 2005-08-12 12:56:31 得分 0

首先澄清一点:指针就是地址。平常说的指针是指针变量,也就是说是指针类型的变量。  
  再换句更清楚的话说,就是这是一种特殊类型的变量,其中保存的是某些变量的地址而已。  
  指针是一中变量类型,叫做指针类型。  
  怎么会有不同的指针类型呢?  
  如:double   *           int     *      
  这些东西只是告诉编译器是指针指向的变量的类型不同而已。  
  指针就是指针,不存在什么其他类型。  
  所以说指针变量到底多大,这个问题只跟寻址类型有关,和所指变量的类型无任何关系。  
  32为寻址的话,那其大小必然为4个字节,如果是16位寻址那肯定是2个字节。  
  刚才有位老兄说的tc下跟编译模式有关,也非常正确(个人见解)。

megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-12 13:10:26 得分 0

楼上的说法不太好。  
   
  虽然有些书的确说明指针就是地址,但这种说法不好,会造成进一步的混乱,举个例子:  
   
  对于int   a[10]和int   *   const   p来说,如果指针就是地址,那么a就应该叫指针常量,既然a是指针常量,那么p怎么说呢?难道叫指针变量常量?这显然让人摸不着头脑;难道就叫指针常量?但p跟a显然是两回事,不同的。  
   
  因此,把地址说明为指针只会引起更大的混乱。把指针的值说明为地址更好,而指针就叫地址变量,数组名a就叫地址常量,这更符合通常的习惯用法。

hejiwangbaggio()回复于 2005-08-12 13:25:56 得分 0

个人觉得这个只是个称呼问题而已!  
  说指针是地址,这只是给他起个名字而已,你想这么叫就这么叫。  
  但是我们都习惯了说指针就是指针变量,所以有些称呼叫起来就觉得有些别扭。  
  关键是明白其本质是最重要的!

LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2005-08-12 13:30:12 得分 0

 
          指针表示一个地址值,用于存储并标志每一个内存单元地址。为了寻址32位机器的全部地址空间,则指针必须能表示0~(2^32-1)范围内的值,指针本身 大小则应不小于32(bit)/8(bit/byte)=4   byte。为了寻址更大的地址空间,指针本身需要能表示更大范围内的值。为了能够寻址64位机器地址空间,指针需要能表示0~(2^64-1)范围内的 值,指针本身大小则应不小于64(bit)/8(bit/byte)=8   byte。

OpenHero(开勇)回复于 2005-08-12 13:33:50 得分 0

看情况

aiguozhou(想起)回复于 2005-08-13 00:35:47 得分 0

32位处理器上应该都是4
阅读(3993) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~