C语言指针的地址范围是多少?

比如我定义了一个指针变量int *p;(是两个字节整型)
一般用法 p=&addr
那这个&addr的范围是多少啊,是0到65535吗
那*p的内容的范围又是多少呢,也是0到65535吗

C语言的指针地址范围是4字节空间,即从地址0x00000000~地址0xFFFFFFFF。但其中有些字段是系统保护的或所使用的硬件平台根本就不存在,所以用户指针并不能完全使用这个空间。不过用户不必担心,只要按规范使用指针,系统都会自动正确安排。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-26
  1、变量的地址用&运算符获取。
  int a;
float b;
int *pa; float *pb;
pa = &a, pb = &b; //这里用&获取,或者说&表达式即是一个变量地址。
  2、变量的地址,实际上是一个无符号整数类型。
  int a = 2;
float b = 3;
if ((unsigned)&a > (unsigned) &b)
printf("变量a的地址大于变量b的地址\n");
  3、指针也是一个变量,也具备地址。
  int a = 2;
int *pa = &a;
int **ppa = &pa; //ppa保存的是指针的地址
  4、其它常用的指针形式
  int *pa[2]; //指针数组,有指针变量组成的数组

int a[2][2] = {1,2,3,4};
int (*pa)[2] = a; //数组指针,指向具备2个整型元素的数组。

void hello() { ; }
void (*pfunc)(void); //函数指针

void *getaddr(int var_addr); //返回类型为指针的函数
第2个回答  2016-01-28
C语言的指针地址范围是4字节空间,即从地址0x00000000~地址0xFFFFFFFF。但其中有些字段是系统保护的或所使用的硬件平台根本就不存在,所以用户指针并不能完全使用这个空间。不过用户不必担心,只要按规范使用指针,系统都会自动正确安排。
第3个回答  2010-08-05
指针变量的数据表示范围为0~机器位数个字节能表示的范围.
如32位计算机中为 0~4294967295(就是0~4GB)
*p的范围与它的指针类型有关,如:
int *p;此时*p的数据范围为: 整型的数据范围.
第4个回答  2010-08-05
你要注意sizeof(int*)的大小是4字节,所以一共32bit

是事实上在32位处理器上地址都是32bit的,运用简单的组合数学原理可知,32bit的数据(这里是指针)最多可以表示2^32 = 4294967298个地址,当然他们编址从0 ~ 4294967297

所以指针可以表示4294967298个地址,也就是最大4G的空间。。

int也是4个字节,所以分析方式和上面完全一致。。

以上

C语言指针的地址范围是多少?
C语言的指针地址范围是4字节空间,即从地址0x00000000~地址0xFFFFFFFF。但其中有些字段是系统保护的或所使用的硬件平台根本就不存在,所以用户指针并不能完全使用这个空间。不过用户不必担心,只要按规范使用指针,系统都会自动正确安排。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种...

关于c语言指针的一些问题。
1、不是说系统64位它就是8字节,而是受限于地址总线的字节宽度,你的地址总线是64位的即指针就是8字节的,但是现在的64位个人pc多半是x86-64能兼容32位的应用程序。2、有,你64 位的机器,它的虚拟内存可以到8TB,如果你在64位机上装个32位的windows你会发现,我的个去……慢的要死(我犯过...

请教C语言中NULL指针的概念
NULL被定义为0,在C中约定,一旦指针为NULL,即为该指针指向的内容不可用。在DOS(WINDOWS的基础)中,物理地址0开始的部分单元被操作系统占用,如果试图读写0地址的内容将被视为非法的,会立刻结束用户程序而退出。

C语言 指针占4个字节 指针应该包含了一个数据地址 那这个数据地址占多大...
总结一下,在32位编程环境下,你不妨把指针看成32位的。它的值加在基址上,就是这个指针的管辖范围了。因为这个基址是可变的,理论上可以管辖大于4g的空间,但要硬件支持,也就是地址总线必须超过32位。同时指针也要受到权限的限制,就像你伸手进银行的窗口,人却未尽进得去一样,操作系统会提示一般保...

C语言中的指针是个什么类型的变量?
1.指针的类型 就是 指针 指针大小和内存的编址方式有关,只是恰好与无符号整形大小相同 他的大小是 4字节(32位) 就是类似 0012ff78(16进制 32位)注:如果你的电脑是64位电脑 那么他的大小就是8字节!2.指针是用来保存 内存地址的 内存有 按32位编制 和按64位编制之分 3.为什么要给指针定义...

在C语言中一个指针占用多少字节。
指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。比如以前是16位系统,指针即为2个字节,现在一般是32位系统,所以是4个字节。指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的...

请问一下C语言中的far和near怎么用?书上好像没介绍到,,但在别的资料上...
在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针...

C语言里面的地址是什么意思,指针指向一个变量的地址
C语言里面的地址实际上就是一个内存单元的编号,计算机一般是以一个字节为最小的存储单元的,每个字节就给它编一个编号,这个编号就是这个字节的地址,这个编号也就是地址是具有唯一性的。指针指向一个变量的地址,这个类似于,通过知道房间号就可以确定这个房间的具体位置是一样的道理,这个房间编号就是...

C语言指针问题
指针本质上是一个4字节长度的数值(32位机器上,64位上是8字节长度),它用来表示一个内存的地址,可以通过解引用来取出这个数值制定内存中的值。int *p;这里,定义的是一个指向int变量的指针。它同时也可以用来指向一个int数组。因为在C中,数组的表示是通过元素的首地址来表示的。作为指针,它和int...

c语言指针,浮点数。指向浮点数的指针,里面存的是该浮点数的首地址...
指向浮点数的指针,里面存的是该浮点数的首地址;如:float *p,a=9.4;p=&a;\/\/p指向a\/\/p指针中存储的是a的地址,不存在其指针指向的是其第一个字节的说法

相似回答