一个指针占几个字节?为什么?

本文介绍了指针在32位和64位计算机上的大小差异,一个指针在32位系统中占用4个字节,64位系统中占用8个字节。指针变量存储的是特定类型数据的地址值,因此指针变量的大小等于地址的字节数。同时,区分了指针、地址和指针变量的概念,强调指针变量是存放地址的变量。文章还指出,在日常讨论中,人们常将指针变量简称为指针,但二者概念有别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个指针在32位的计算机上,占4个字节;
一个指针在64位的计算机上,占8个字节。

指针变量里面存放的是:某一类型的数据的第一个地址值。
也就是地址值占几个字节,指针变量就占几个字节
因此,
一个指针占几个字节
一个地址占几个字节
一个指针变量占几个字节
三种问法等同

===>(32/8 = 4字节,64/8 = 8字节)

指针和指针变量的区别

内存地址是内存单元的编号 ;
指针就是地址,地址就是指针;
指针变量就是存放地址的变量,也可以说,指针变量就是存放指针的变量
例如:
int *p中p就是指针变量。
需要注意:通常我们叙述时,会把指针变量简称为指针,实际上它们的含义并不一样

详细请看:一个指针占几个字节?原理是什么呢?_AsiaSun.的博客-CSDN博客_指针占几个字节

<think>好的,我需要回答用户关于指针类型在不同操作系统和编译器下用多少字节的问题。首先,我需要回顾用户提供的引用资料,找出相关的信息。 根据引用[1],指针变量在16位编译器下2字节,32位下4字节,64位下8字节。引用[2]中的表格也显示,指针在16位、32位、64位下分别用2、4、8字节。引用[3]提到32位编译器指针4字节,64位8字节。引用[4]指出64位下指针如int*8字节。引用[5]解释指针的大小由寻址空间决定,32位系统4字节,64位8字节。 总结这些信息,指针的大小主要取决于系统的寻址能力,即位数。16位系统指针2字节,32位4字节,64位8字节。需要注意编译器的位数可能影响结果,比如32位编译器在64位系统下仍用4字节指针。此外,不同类型的指针(如char*、int*)在相同环境下大小相同,因为它们存储的都是地址。 然后,根据用户要求的结构,我需要分点说明不同情况下的指针大小,并生成相关问题。需要确保使用正确的中文术语,格式正确,数学表达式用$...$,独立公式用$$...$$,但这里可能不需要数学公式。最后,生成相关问题,如指针大小的决定因素、不同编译器下的差异等。</think>### 指针类型在不同系统及编译器下的字节指针类型用的字节数**与操作系统位数和编译器位数直接相关**,与指针指向的数据类型无关(例如$char*$和$int*$用空间相同)。具体规则如下: 1. **16位系统/编译器** - 指针用$2$字节(寻址空间为$2^{16}$,即$64$KB)[^1][^2]。 2. **32位系统/编译器** - 指针用$4$字节(寻址空间为$2^{32}$,即$4$GB)[^1][^2][^3][^5]。 3. **64位系统/编译器** - 指针用$8$字节(寻址空间为$2^{64}$)[^4][^5]。 #### 特殊情况说明 - **混合环境兼容性**:32位程序运行在64位系统时,指针仍为$4$字节。 - **不同指针类型一致性**:无论指针类型是$char*$、$int*$还是结构体指针用空间均相同[^5]。 #### 验证示例(C语言) ```c #include <stdio.h> int main() { printf("char*: %zu\n", sizeof(char*)); printf("int*: %zu\n", sizeof(int*)); return 0; } ``` 输出结果在64位编译器下为: ``` char*: 8 int*: 8 ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值