文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、指针是什么?
- 二、如何产生地址?
- 什么是位?
- 什么是字节?
- 位与字节的数量关系?
- 正电和负电如何表示
- 一共会产生多少地址?(W32系统)
- 三、数据的存储如何与地址一 一对应?
- 四、指针占几个字节?
- 总结
前言
一、指针是什么?
在C语言中,指针就是地址。二、如何产生地址?
在32位系统 —— 有32根地址线/数据线/控制线 (每根线有两种状态 0/1,所以总数为:2^32。正好对应 2^32个地址单元,即:2^(4 * 8)byte/(1024 * 1024 * 1024)byte=4GB(说明程序最多只能使用4GB内存) ----- 地址总线决定了cpu所能访问的最大内存空间的大小)什么是位?
位表示的是二进制位,一般称为比特,即0或1,是计算机存储的最小单位。什么是字节?
字节是计算机中数据处理的基本单位。位与字节的数量关系?
bit(位) 1 byte(字节)=8bit(位) 1 KB=1024byte=1000byte(约等于) 1 GB=1024MB,1MB=1024KB,1KB=1024B,1B(字节)=8bits(比特)正电和负电如何表示
正电用1表示,负电用0表示。一共会产生多少地址?(W32系统)
一共会产生$2^{32}$个地址(每个地址里可以存1个字节(8位)的数据,跟内存地址位数无关),即一共可以
存下 $2^{32}$个字节的数据,2^(4*8)byte/(1024*1024*1024)byte=4GB)。
00000000 00000000 00000000 00000000 0
00000000 00000000 00000000 00000001 1
....
11111111 11111111 11111111 11111110 (2^32)-2
11111111 11111111 11111111 11111111 (2^32)-1
如下图(所示)
1.每个地址里可以存一个字节(8位)的数据,跟内存地址位数无关; 2.一个变量到底会占用几个内存单元是由在定义时根据其数据类型确定的,系统会根据这个变量的数据类型来 分配 一定长度的空间!
例如:int a=10; a是int型的变量,占4个字节,又因为每个地址里可以存一个字节的数据,所以想要存下a变量的数据系统需要分配4个内存单元。
如下图(所示):
指针是用来存放地址的,而地址是怎么产生的呢?在W32平台上,有32根地址线,相当于有32个二进制序列 (即:32个比特位序列,即4 byte ),要想存放这么多序列,则需要4个字节(32bit/8 = 4 byte);故指针的 大小为4个字节。【同理:W64 指针占8个字节】
代码如下(所示):
#includeint main() { int a = 10; int* p; //p是一个指针变量,用来存放地址的 p = &a; printf("%dn", *p); //10 *p = 20;//* - 解引用操作符/间接访问操作符 printf("%dn", *p);//20 return 0; }
图如下(所示):
总结
1. 指针就是地址,地址就是指针; 2. 每个地址里可以存一个字节(8位)的数据,跟内存地址位数无关; 3. 一个变量到底会占用几个内存单元是由在定义时根据其数据类型确定的,系统会根据这个变量的数据类型来 分配一定长度的空间!



