前言
🎈大家好,我是何小侠🎈
🌀大家可以叫我**小何或者小侠🌀**
🔴我是一名普通的博客写作者🔴
💐希望能通过写博客加深自己对于学习内容的理解💐
🌸也能帮助更多人理解和学习🌸
🍃我的主页:何小侠的主页🍃
这篇博客我们一起来学习C语言中最经典的部分——指针,虽然不会将所有内容都阐述,但是应该能让你有所收获。
指针是什么?🍊
- 指针是内存中一个最小单元的编号,也就是地址
- 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
总结:指针就是地址,口语中说的指针通常指的是指针变量
这些大家应该是老生常谈的了。我们要来讲点不一样的!
首先我们先看一下内存。
我们要对内存有一个基本的了解,在内存中地址是从低到高排列的,每一个基础单元的大小是一个字节,地址其实本来应该是2进制表示,但是二进制太长看起来不方便就用1个16进制位表示4个二进制位。
上面这段话看起来很简单,但是还是有很多知识点的。
首先我们介绍一下,有关于内存单位的换算
内存单位的换算🍊
为什么1个16进制位能表示4个二进制位🍊
然后我们再来了解一下为什么1个16进制位能表示4个二进制位
看到这个图片应该就很好理解了,大家要记得F = 1111,为什么是4位,因为
F是16进制的最后一个个位数,如果再+1就变成了十位数,同理二进制也会变成10000。
地址到底怎么来的🍊
然后我们介绍一下地址到底是怎么来的。
首先我们要知道现在市面上的电脑大多都是32位和64位,16位已经算是远古神器了,其实32位都很少很少见了。
那么32和64到底有什么含义呢?且听我细细道来
32位电脑主要指的是它的处理器架构用的是32位的架构,这意味着它的CPU只有32条地址线。
地址线是用来编址(地址)的,
一根地址线可以产生高电平(高电压),低电平(低电压).
高电平就是1,低电平就是0。
但我们一共有32根,也就是说可以产生32个1或0的排列
比如
16进制地址 | 二进制 |
0x00000000 | 00000000000000000000000000000000 |
0x00000001 | 00000000000000000000000000000001 |
0xFFFFFFFF | 1111111111111111111111111111111111111 |
我们始终要牢记地址只是用16进制表示起来方便看而不是就是16进制
那么0x00000000 ~~0xFFFFFFFF一共有多少种可能呢?
2 ^ 32次方种可能,也就是说一共其实有2 ^ 32 次方个地址
而每一个地址都是1个字节
那么2 ^ 32的单位就是字节,我们自己动"手"(计算器)算算如果转换为GB那么是多少呢?
我这里就用计算器演示一下,其实电脑上的计算器我也不是很会用
- 首先我们在16(hexadecimal)进制上输入1 0000 0000
- 然后再切换为10进制(decimal)
先 / 1024=4194304KB
再/1024= 4096MB
最后得到4GB
同样我们也可以算出64位电脑能编址多大空间。
这里直接给出答案,17179869184GB
但是我们去买电脑的时候不会有这么大内存的电脑,因为内存的造价比较贵,我们一般看到的是16GB,和32GB
为什么指针又是4个字节又是8个字节呢?🍊
首先介绍编译器
x86就是32位 x64就是64位
#include<stdio.h> int main() { int a = 0; int* p = &a; printf("%d", sizeof(p)); }
看看这个简单的代码。
这是在x86上得出的
这是在x64上得出的。
Why?
我们先看32位也就是x86
我们知道一个字节是8个bit位,一个16进制位就是4个bit位,所以一个字节就能存储2个16进制位。
那么64位大家是不是也也能理解了呢?
总结🍊
这篇博客我们系统的介绍了指针这一个简单的名词身后所容纳的知识,希望大家也能学到新东西
最后如果这篇博客有帮助到你,欢迎点赞关注加收藏
如果本文有任何错误或者有疑点欢迎在评论区评论