在C语言中一个指针占用多少字节。

老师讲的时候说是占有2个字节,后来我在VC上做了实验,不是2个字节,老师讲可能与电脑本身有关,它可能占电脑的一个字,现在电脑一般都是32位的,也许以前电脑是16位的所以占2个字节

第1个回答  推荐于2019-09-10

一个指针变量在内存中占两个字节(small模式编译),一个指针变量在内存中占四个字节(32位机器上),一般都是32位机器的,所以四个字节咯。

指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

扩展资料

在64位机器中数据类型指针占的字节:

char类型占1个字节

short类型占2个字节

int类型占4个字节

long类型占4个字节

unsigned int类型占4个字节

float类型占4个字节

double类型占8个字节

long double类型占12个字节

char类型指针占4个字节

short类型指针占4个字节

int类型指针占4个字节

long类型指针占4个字节

unsigned int类型指针占4个字节

float类型指针占4个字节

double类型指针占4个字节

long double类型指针占4个字节

参考资料来源:百度百科 - 指针



本回答被网友采纳
第2个回答  推荐于2019-08-12

指针即为地址,它是一个无符号整数(unsigned int),

它是一个以当前系统寻址范围为取值范围的整数。

指针几个字节跟语言无关,而是跟系统的寻址能力有关。

譬如以前是16为地址,指针即为2个字节,

现在一般是32位系统,所以是4个字节,

以后64位,则就为8个字节。

扩展资料:

1、在64位机器中:

char类型占1个字节,short类型占2个字节

int类型占4个字节,long类型占4个字节

unsigned int类型占4个字节,float类型占4个字节

double类型占8个字节。long double类型占12个字节

2、内存分配表

计算机中的内存都是编址的,就像你家的地址一样。在程序编译或者运行的时候,系统(可以不关心具体是什么,可能是编译器,也可能是操作系统)开辟了一张表。每遇到一次声明语句(包括函数的传入参数的声明)都会开辟一个内存空间,并在表中增加一行纪录。记载着一些对应关系。

3、C语言

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

参考资料:(1)百度百科 指针

                (2)百度百科 字节

本回答被网友采纳
第3个回答  推荐于2019-10-06

指针其实就是地址, 与它所指的基类型无关, 更与C语言无关, 只与机器有关. 如果机器是16位寻址的, 那指针就是16位的, 如果是32位寻址的, 指针也是32位的.

较特殊的是老式的X86, 它是16位的机器, 但采用了分段寻址, 所以指针是两个16位合起来的(但与真正的32位又不同)。

扩展资料:

相关单位

B与bit

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

B与iB

1KiB(Kibibyte)=1024byte

1KB(Kilobyte)=1000byte

1MiB(Mebibyte)=1048576byte

1MB(Megabyte)=1000000byte

硬盘生产商是以GB(十进制,即10的3次方=1000,如1MB=1000KB)计算的,而电脑(操作系统)是以GiB(2进制,即2的10次方, 如1MiB=1024KiB)计算的。

但是国内用户一般理解为1MiB=1M=1024 KB, 所以为了便于中文化的理解,翻译MiB为MB也是可以的。

同样根据硬盘厂商与用户对于1MB大小的不同理解,所以好多160G的硬盘实际容量按计算机实际的1MiB=1024KB算都不到160G,这也可以解释为什么新买的硬盘“缺斤短两”并没有它所标示的那么大。

数据类型

Byte数据类型(字节型)用一个字节(Byte)储存,可区别256个数字,取值范围:0到255。 Byte是从0-255的无符号类型,所以不能表示负数。具体参照数据类型。

语言字符

效果等同于 unsigned char型

typedef unsigned char BYTE

定义一种新类型BYTE,它其实就是unsigned char

在VC++中,byte型数据的定义包含在windows.h头文件中,调用byte需要添加代码#include <windows.h>

而在java中,byte是一个关键字

表示声明了一个整形常量在内容中占用一个字节

取值范围是-128~127

参考资料:百度百科-字节

本回答被网友采纳
第4个回答  推荐于2019-10-09

指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。

譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。

扩展资料:

指针中*和&运算

(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。我们假设有这么两段内存地址空间,他们取值如下:(单位:H,16 进制)

假设有这么一段代码

假设开辟空间时p 被分配给了3001H、3002H 两个位置

int *p;

p=2003H;

*p=3000H

**p的值为多少?

**p=*(*(p))=*(*(2003H))=*(3000H)=3000H

那么&&p、*(&p)和&(*p)又等于多少?

&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?

*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p

&*p=&(*p)=&(3000H)=2003H,之前有人认为这个是不成立的,实际上&(3000H)是求存储3000H这个变量所在的内存地址,仍然是p的值。下面的代码是个很简单的例子:

输出的结果为5

参考资料:百度百科指针

本回答被网友采纳
第5个回答  推荐于2019-08-30

指针即为地址,指针几个字节跟语言无关,

而是跟系统的寻址能力有关,

譬如以前是16为地址,指针即为2个字节,

现在一般是32位系统,所以是4个字节,

以后64位,则就为8个字节。

扩展资料:

在64位机器中:

char类型占1个字节

short类型占2个字节

int类型占4个字节

long类型占4个字节

unsigned int类型占4个字节

float类型占4个字节

double类型占8个字节

long double类型占12个字节

-------------------指针占4个字节---------------------

char类型指针占4个字节

short类型指针占4个字节

int类型指针占4个字节

long类型指针占4个字节

unsigned int类型指针占4个字节

float类型指针占4个字节

double类型指针占4个字节

long double类型指针占4个字节

内存分配表

计算机中的内存都是编址的,就像你家的地址一样。在程序编译或者运行的时候,系统(可以不关心具体是什么,可能是编译器,也可能是操作系统)开辟了一张表。每遇到一次声明语句(包括函数的传入参数的声明)都会开辟一个内存空间,并在表中增加一行纪录。记载着一些对应关系。(如图1所示)

Declaration | ID Name Address Length

int nP; | 1 nP 2000 2B

char myChar; | 2 myChar 2002 1B

int *myPointer; | 3 myPointer 2003 2B

char *myPointer2; | 4 myPointer2 2005 2B

指针,是一个无符号整数(unsigned int),它是一个以当前系统寻址范围为取值范围的整数。32位系统下寻址能力(地址空间)是4G Bytes(0~2^32-1)二进制表示长度为32bits(也就是4Bytes), unsigned int类型也正好如此取值。

参考资料:百度百科--指针

本回答被网友采纳
相似回答