17.指针的概念及其分类

news2025/1/20 7:19:43

内存

存储器

存储数据的器件

外部存储器

长期存放数据,掉电不丢失数据。
常见的外存数据:硬盘、ROM、U盘

内部存储器

暂时存储数据,掉电丢失
常见的内存数据:ram、DDR
物理内存
实实在在的存储设备。
虚拟内存
操作系统虚拟出来的内存。
32bit 32根寻址总线
0x00 00 00 00
0xff ff ff ff
在这里插入图片描述
操作系统会在物理内存和虚拟内存之间做映射。
在这里插入图片描述
在32位系统下,每个进程(运行中的程序)的寻址范围是4G
0x00 00 00 00 ~ 0xff ff ff ff
在运行程序的时候,操作系统会将虚拟内存进行分区如下:

1.堆
在动态申请内存的时候,在堆里开辟内存。

2.栈
主要存放局部变量(在函数内部,或复合语句内部定义的变量)。

3.静态全局区
1):未初始化的静态全局区
静态变量(定义的时候加static修饰),或全局变量,没有初始化的,存在此区。
2):初始化的静态全局区
全局变量、静态变量、赋过初值的存放在此区。

4.代码区
存放程序代码

5.文字常量区
存放常量

内存是以字节为单位来存储数据的,可以将程序中的虚拟寻址空间,看成一个很大的一维字符数组。

指针的概念

系统给虚拟内存的每个存储单元分配了一个编号,0x00 00 00 00 ~ 0xff ff ff ff,称之为地址。指针就是地址。

指针变量:用来存放地址编号的变量。

在32位平台下,地址总线是32位的,所以地址是32位编号,指针变量是32位即4个字节。

注意:
1.无论什么类型的地址,都是存储单元的编号,在32位平台下都是4个字节,即任何类型的指针变量都是4个字节大小。
2.对应类型的指针变量,只能存放对应类型的变量的地址。
在这里插入图片描述

指针变量的定义

1.简单的指针变量

数据类型 * 指针变量名
int * p; //定义了一个指针变量p

在定义指针变量的时候,*是用来修饰变量的,说明变量p是个指针变量。
变量名是p。

2.关于指针的运算符

& 取地址 、 * 取值

例:

int a = 0x1234abcd;
int *p;
p = &a; //把a的地址给p赋值,&是取地址符。

p保存了a的地址,也可以说p指向了a。
p和a的关系分析:a的值是0x1234abcd,假如a的地址是:0xbfe89869
在这里插入图片描述

int num;
num = *p;

分析:
1.在调用的时候 *代表取值的意思,*p就相当于p指向的变量,即a
2.故 num = *p 和 num = a 效果是一样的。
3. num的值为 0x1234abcd。

如果在一行中定义了多个指针变量,每个指针变量前面都需要加 * 来修饰

int *p,*q; //定义了两个整型的指针变量p和q
int *p,q; //定义了一个整型指针变量p,一个整型变量q

#include<stdio.h>
int main()
{
	int a = 100, b = 200;
	int* p_1, * p_2 = &b;
	p_1 = &a;
	printf("a=%d\n", a);
	printf("*p_1=%d\n", *p_1);
	printf("b=%d\n", b);
	printf("*p_2=%d\n", *p_2);
	return 0;
}

在这里插入图片描述

3.指针大小

#include<stdio.h>
int main()
{
	char* p1;
	short int* p2;
	int* p3;
	long int* p4;
	float* p5;
	double* p6;
	printf("sizeof(p1)=%d\n", sizeof(p1));
	printf("sizeof(p2)=%d\n", sizeof(p2));
	printf("sizeof(p3)=%d\n", sizeof(p3));
	printf("sizeof(p4)=%d\n", sizeof(p4));
	printf("sizeof(p5)=%d\n", sizeof(p5));
	printf("sizeof(p6)=%d\n", sizeof(p6));
	return 0;
}

在这里插入图片描述

#include<stdio.h>
int main()
{
	int a = 0x1234abcd;
	int* p;
	p = &a;
	printf("&a=%p\n", &a);
	printf("p=%p\n", p);
	return 0;
}

在这里插入图片描述

指针的分类

按指针指向的数据类型来分

1.字符指针

字符型数据的指针

char* p; //定义了一个字符指针变量,只能存放字符型数据的地址编号
char ch;
p = &ch;

2.短整型指针

short int* p;
short int a;
p = &a;

3.整型指针

int* p;
int a;
p = &a;

注:多字节变量,占多个存储单元,每个存储单元都有地址编号,
c语言规定,存储单元最小的那个编号,是多字节变量的地址编号。

4.长整型指针

long int* p;
long int a;
p = &a;

5.float型指针

float* p;
float a;
p = &a;

6.double型指针

double* p;
double a;
p = &a;

7.函数指针

8.结构体指针

9.指针的指针

10.数组指针

11.通用指针 void*

总结:无论什么类型的指针变量,在32位系统下都是4个字节,在64位系统下是8个字节。指针只能存放对应类型的变量的地址编号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFmpeg进阶: 截取视频生成gif动图

文章目录1.封装视频滤镜2.截取视频生成gif3.gif优化4.示例效果现在互联网上很多人都通过表情包来表达自己的情绪&#xff0c;常用的表情包很多都是视频文件的一部分。这里就介绍一下如何通过ffmpeg截取视频生成gif动图。其实原理很简单&#xff0c;首先我们seek到视频对应的位置…

Go sync.WaitGroup的学习

一.前言 二. 夯实基础 2.1 sync.WaitGroup是什么&#xff1f; Go语言中除了可以使用通道&#xff08;channel&#xff09;和互斥锁进行两个并发程序间的同步外&#xff0c;还可以使用等待组进行多个任务的同步&#xff0c;等待组可以保证在并发环境中完成指定数量的任务 在…

Spring Boot 中的Thymeleaf分页和排序示例

在上一篇文章中&#xff0c;我们已经知道如何构建Spring Boot Thymeleaf示例。今天&#xff0c;我将继续使用 Spring Data 和 Bootstrap 进行 Thymeleaf 分页和排序&#xff08;按列标题&#xff09;。 百里香叶分页和排序示例 假设我们在数据库中有这样的教程表&#xff1a;…

深入理解 Android 模块化里的资源冲突

翻译自 Understanding resource conflicts in Android ⚽ 前言 作为 Android 开发者&#xff0c;我们常常需要去管理非常多不同的资源文件&#xff0c;编译时这些资源文件会被统一地收集和整合到同一个包下面。根据官方的《Configure your build》文档介绍的构建过程可以总结这…

RFSoC应用笔记 - RF数据转换器 -22- API使用指南之配置DAC相关工作状态和中断相关函数使用

前言 本文完结后&#xff0c;关于RFSoC的配置的API函数部分就全部介绍完毕&#xff0c;后续有空将更新介绍简单的射频收发回环示例工程&#xff0c;不定时更新&#xff0c;敬请期待。 配置DAC相关工作状态 XRFdc_SetInterpolationFactor 函数原型 u32 XRFdc_SetInterpolat…

内存一致性,指令重排序,内存屏障,volatile解析

文章目录为什么会存在“内存可见性”问题重排序与内存可见性的关系as-if-serial语义单线程程序的重排序规则多线程程序的重排序规则happen-before是什么解决方案&#xff1a;内存屏障Volatile关键字解决内存可见性问题的实现原理为什么会存在“内存可见性”问题 下图为x86架构…

redis 的企业实战应用 (二)

前言&#xff1a; 如今redis的常用场景有 短信登录&#xff1a;使用redis共享session来实现 商户查询缓存&#xff1a;会理解缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩等问题&#xff0c;让小伙伴的对于这些概念的理解不仅仅是停留在概念上&#xff0c;更是能在代码…

【数学】仿射变换

∣降维打击NightguardSeries.∣\begin{vmatrix}\Huge{\textsf{ 降 维 打 击 }}\\\texttt{ Nightguard Series. }\end{vmatrix}∣∣∣∣∣​ 降 维 打 击 Nightguard Series. ​∣∣∣∣∣​ 注&#xff1a;本文讨论的仿射变换仅为y轴上的伸缩变换&#xff0c;且难度在高中生理…

H3CNE V7.0 视频教程

构建中小企业网络全套PPT汇总【V7版本】 第1章 计算机网络概述 第2章 OSI参考模型与TCP IP模型 第3章 局域网基本原理 第4章 广域网基本原理 第5章 IP基本原理 第6章 TCP和UDP基本原理 第7章 路由器、交换机及其操作系统介绍 第8章 命令行操作基础 第9章 网络设备文件…

mycat-3-实战篇

1 总结&#xff1a; 1&#xff1a;用的表必须在mycat的配置文件中配置。 2&#xff1a;mycat默认分片策略中&#xff0c;都是针对表的主键&#xff0c;默认是id,如果主键不是id的&#xff0c;请去rule.xml自己复制一份修改 3&#xff1a; 2 注意细讲解 1&#xff1a;schem…

Springboot启动流程分析(四):完成启动流程

目录 一 添加BeanPostProcessors到IOC容器 二 国际化支持 三 初始化监听器的多路播放器 四 刷新容器 五 注册监听器到IOC容器的多播器 六 完成bean的大规模实例化 6.1 大规模实例化bean 6.1.1 连续三层do...while循环作用 6.1.2 FactoryBean是什么&#xff1f;为什么要…

04 YAML kubetnetes世界里的通用语

文章目录1. 前言2. 声明式和命令式是怎么回事&#xff1f;3. 什么是YAML&#xff1f;4. 什么是API对象&#xff1f;4.1 k8s都有哪些资源对象4.2 列出kubectl 命令详细执行过程5. 如何描述 API 对象5.1 命令式5.2 声明式5.2.1 声明式YAML语法详解5.2.1.1 header部分详解5.2.1.2 …

【教学类-19-01】20221127《ABAB式-规律排序-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 背景需求&#xff1a; 中班幼儿需要掌握ABAB规律排序&#xff0c;如下图所示&#xff0c;AB两个元素能外形不同、颜色不同。 ​ ​利用Python Word单元格填色功能&#xff0c;随机生成AB样式&#xff0c;引…

STM32模拟IIC与IIC四种实现数字光强采集模块GY30(标准库与HAL库)

目录 代码实现是的IIC通信&#xff0c;数据采集后在串口显示&#xff0c;方便大家实现二次开发 原件选择 GY-30 数字光强度介绍 BH1750芯片参数 引脚说明 BH1750指令集 接线表设计 通过四种方式实现GY-30数据采集 1.标准库模拟IIC实现GY-30采集并串口1显示 2.标准库IIC…

重构uniapp uni-ui coloerUI项目

重构uniapp uni-ui coloerUI项目这里写自定义目录标题重构uniappuni-uicoloerUI项目起源流程重构uniappuni-uicoloerUI项目 起源 从网上复制了若依移动端的代码,但是对里面的文件夹布局方式和第三方组件库引入方式不甚了解,就想着从头创建一个空白项目&#xff0c;然后一步一…

Linux中设置开机启动执行命令和普通用户配置环境变量开机启动生效

记录&#xff1a;343 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;开机启动就执行自定义的命令&#xff0c;配置rc.local文件达到需求&#xff1b;在普通用户中配置环境变量开机启动生效&#xff0c;使用profile实现。 版本&#xff1a; 操作系统&#xff1a;CentOS…

01、Docker入门

目录 1、Docker是什么 2、Docker与虚拟化 3、Docker虚拟化的好处 好处一&#xff1a;应用部署方便 好处二&#xff1a;服务器同等配置&#xff0c;性能更优&#xff0c;利用率更高 4、核心概念 5、CentOS7 安装docker(在线方式) 6、镜像 7、Docker容器 8、查看Docker容…

typescript 八叉树的简单实现

查了一些文章&#xff0c;准备自己用typescript写一个简单的八叉树场景管理。 所谓的简单&#xff0c;就是所有元素都是边长为1的立方体。 元素类和树节点类 //元素类&#xff0c;因为都是边长为1的立方体&#xff0c;所以就用cube命名 export class CubeData {public reado…

由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开

一、问题描述 在使用Windows的远程桌面工具连接WindowsServer2016服务器时&#xff0c;无法连接到服务器&#xff0c;并且提示【由于没有远程桌面授权服务器可以提供许可证&#xff0c;远程回来连接已经断开。请跟服务器管理员联系】。 二、解决办法 2.0、前提 Windows Serv…

黑胶歌曲没权限,看我python大展神通,一分钟一个歌单

前言 大家早好、午好、晚好吖 ❤ ~ 人之初&#xff0c;喜白嫖。 大家都喜欢白嫖&#xff0c;我也喜欢&#xff0c;那么今天就来试试怎么白嫖抑云~ 一、需要的准备 1、环境 Python3.6以上 pycharm2019以上 2、模块 requests # 发送请求模块 第三方模块 exec js # 调用JS的…