IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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语言-基础篇(Ⅲ)

目录

八、指针(基础)

8.1 如何产生地址?

8.2 地址的使用

8.2.1 取地址

8.2.2 指针变量

8.2.3 使用(基础)

8.3 指针的大小


八、指针(基础)

? ? ? ?引:通常买电脑时,配置中有32位/64位,以及内存4G/8G/32G...而如此大的内存又是如何使用的呢?正如在一个大区域找到某个小地方,我们需要知道的是那个地方的地址编号,再通过地址编号找到该地方。同理,编程中的数据需要一块小空间来存储,这块空间的编号就也称为地址,也指针就是地址。

如图8_1 :

8.1 如何产生地址?

? ? ? ?我们这里用32位处理器来解说。32位处理器中就有32条地址线(物理的线),当接通电源后,每条线都会有电信号,产生1、0信号(正电为1,负电为0),这样32条线就能够产生2的32次方个二进制数,这些二进制数编号就是每一个内存单元的地址(补:规定,内存单元的单位为字节)通常的,我们见到的地址编号都是由八个十六进制数组成,毕竟32个二进制数太多了。

? ? ? ? 同理,64位处理器自行理解。

如图8_2,32位所产生的二进制序列:

8.2 地址的使用

8.2.1 取地址

? ? ? ?在学习变量时,我们知道,当创建变量时,实际上就是申请一块内存空间来存储变量信息,那么,怎样才能知道我们创建的变量其中数据存储的地址呢?下面我们来介绍取地址操作。

代码8_1取出变量的储存地址:

#include<stdio.h>

int main() {
	int b = 9;//创建变量b,并初始化为9

	printf("%p", &b);
	return 0;
}

说明:

(1)代码8_1即实现了取出并打印变量b存储数据的地址;

(2)%p,地址的打印类型,使用与%d相似,同时与取地址操作符&一同使用;

(3)打印所得地址表示为八个十六进制数,图8_3:

?

?(4)变量b为整型数据类型,所以为四个字节大小,而打印地址时,我们打印的是第一个单位空间(字节)的地址,即通过第一个地址可找到其他三个单位空间的地址,图8_4:

?补:变量的存储地址也可以在编译程序的内存管理中查看。

8.2.2 指针变量

定义:用来存放地址的变量。

代码8_2,指针变量:

#include<stdio.h>

int main() {
	int b = 9;//创建变量b,并初始化为9
	printf("%p", &b);

    int * pb = &b;
    scanf("%p",pb);

	return 0;
}

说明:

(1)创建指针变量a,来存储变量b的地址,图8_5

(2)指针变量的数据类型为 int *,其中int表示pb指向对象b中元素的数据类型,*号表示a为指针变量;

(3)同理,如果有char ch='A',那么指向ch地址的指针变量的数据类型为char*? ;

?8.2.3 使用(基础)

? ? ? ?我们知道指针变量是指向某一变量的地址的,那么,我们就可以通过指针变量,找到该变量的地址,从而操作该地址所存储的变量。这时,需要使用要解引用操作符*了,如下,

代码8_3:

#include<stdio.h>

int main() {
	int b = 9;//创建变量b,并初始化为9
	printf("%p\n", &b);//打印地址
	int* pb = &b;//创建指针变量pb,并指向b的地址
	printf("%p\n", pb);//打印地址

	*pb = 81;//通过pb中的地址找到b的地址,并将该地址数据改为81
	printf("%d", *pb);

	return 0;
}

图8_6,运行结果:

?说明:

解引用操作符*,对pb进行解引用操作找到所指向对象b的地址,同时可操作该地址;

图解:

int b=9=>假设b的储存地址为0000000A
int* pb=&b=>pb=0000000A
*pb=81=>通过对pb解引用找到b的地址,并使b=81

8.3 指针的大小

? ? ? ?对指针有了初步了解后,现在我们来看指针的大小。与计算数据类型的大小相同,计算指针大小同样可以使用操作符sizeof,代码8_4:

#include<stdio.h>

int main() {
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(long long*));
	printf("%d\n", sizeof(float*));
	printf("%d\n", sizeof(double*));
	return 0;
}

得到运行结果,图8_6:

?可以看到,指针的大小都是相同的。

说明:

我们知道,指针存储的地址,所以指针的大小取决于地址的大小;而前面提过,地址的产生即32条地址线通电后所产生的由1、0组成的有序二进制数,那么,在32位处理器上,地址有32个数,当每个数用一个bit位来存储时,就有32个bit位(4个字节)来存储,所以地址的大小为4个字节,可知地址的大小与其所存储的数据类型无关

同理可知,在64位处理器中,地址的大小就是64个bit位,也就是8个字节。?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 14:45:41  更:2021-10-24 14:46:19 
 
开发: 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 6:07:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码