栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 前言
  • 一、指针是什么?
  • 二、如何产生地址?
    • 什么是位?
    • 什么是字节?
    • 位与字节的数量关系?
    • 正电和负电如何表示
    • 一共会产生多少地址?(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个字节】

代码如下(所示):

#include
int 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. 一个变量到底会占用几个内存单元是由在定义时根据其数据类型确定的,系统会根据这个变量的数据类型来
   分配一定长度的空间!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号