| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言的精华——指针 指针初识 -> 正文阅读 |
|
[C++知识库]C语言的精华——指针 指针初识 |
这是c语言的重中之重,对于许多数据结构与算法的实现,后续的结构体和数组,联合体这些都与指针有关,所以也希望大家能重视起来,这篇文章只是让大家已最简单的方式了解指针,后续对指针的详细介绍会在后续文章中写出(作者又在给自己挖坑了,而且不知道什么时候填坑) 内存想了解指针,应该先了解内存。 内存是计算机的存储器,这里扩展一下计算机的大概组成 计算机组成:控制器,运算器,储存器,输入设备,输出设备 计算机所有程序的运行都是在内存中的,所以内存在计算机也是尤为重要。 当我们有一台电脑后都会有相应的内存,比如说我用的 是16G的内存,但是内存这么大,计算机又是怎样使用的呢? 在使用前,计算机会把计算机的内存分为一个个小块,并且每一块给他取了一个名字,在使用的时候直接对接名字即可。用一个实际生活的例子来举例,每次你点外卖时,都会把自己的地址信息提供给外卖平台,这样外卖员在给你送外卖时得知了你是xxx区xxx学校的,这样就可以迅速的把外卖送到。 用图来解释应该是这样 ?一整个内存被分配成很多个空间 这样就派生出来两个问题 *1、内存是如何编号的 *2、一个这样的内存单元站多大空间 这里还需要简单介绍一下计算机 在我们讨论计算机的时候应该有聊过32位和64位吧(当然现在应该都是64位的计算机了) 64位就代表了物理上有64根地址线,在计算机通电后会产生正负点,这样就产生了计算机的二进制位(电信号转化为数字信号),正点为1,负电为0 因为现在是为了让大家理解,,而且大家使用大多数编译器都是32位的(除去新的vs2022),所以就以32位来介绍 这样产生的32个二进制位就产生了从00000000000000000000000000000000~1111111111111111111111111111111111111111个数字 这些序列都作为内存的编号,当编号作为内从空间的代表时,我们就称作这些编号为捏村单元的地址。这样编写,我们的计算机就能管理2^32个内存单元,假设一个内存单元是一个bit位那么总共有4294967296个bit位 ?这个数字/8就代表了总共能管理的字节数 再/1024 ?算出来应该是kb 再/1024 ?算出来是512MB 再/1024,就是0.5GB 现在我们来看,这个内存算是非常小的了,所以一般计算机的内存分配也不会是这样分配的。 大家知道c语言最小的变量char类型占一个字节,一个字节就是8bit,那样就是8个地址,所以最终经过平衡后一个内存单元占一个byte(字节),用于分配地址 接下来就要正式的聊到指针了
这样的一段代码,计算机就给a这个变量分配了四个字节的空间 接下来介绍一下查看a这个变量的地址,这里我们需要用到&,这是一个取地址符号,用于得到变量地址和%p作为输出
?得到的地址就是这个,但是&只会拿到这个变量第一个字节的地址,但是当我们需要存放这个地址的时候我们就需要一个变量去储存,这在c语言中就叫指针变量,a这个变量是int型,指向a的这个指针变量的类型位int*,&用于取出变量的直至
这个*代表了A是一个指针变量,Int代表了这个指针所指向的变量的类型是Int型 当然我们可以举一反三
现在我来教大家如何使用这个指针
A这个指针是指向a所在的内存空间,如果我们想使用的时候应该这样
第三行这个*代表的就是解引用操作,就是通过a的地址来找到a所在的内存空间,这里可以跑一下程序验证一下,这里我通过指针将a的值改为了10
? 这里已经证明更改成功了? 再来看一下最后一点指针类型的大小
?这里NULL代表了空指针,也就是不指向任何内存的一个指针,这样我们可以使用sizeof来计算一下空指针的大小 ?同理,其实实际上所有指针的大小都是相同的,都是四个字节,这是因为32位的编译器指针大小的是32个bit,所以计算出来是4byte. |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:05:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |