关于指针的入门
创始人
2025-05-31 05:56:03
0

目录

部分操作符优先级

 指针中的取地址&和解引用* 

指针运算、数组和指针的关系

附加:如何用函数交换数据的值?


部分操作符优先级

先上一张图,了解指针中的*的优先级

*(解引用操作)处于第二优先级

理解指针:

1. 指针是内存中一个最小单元的编号,也就是地址
2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

3.指针是一种特殊的变量类型,它指向内存中的一块地址

 

 先来看一些指针相关的变量的简单类型(函数指针以及二级指针目前暂不涉及)


 指针中的取地址&和解引用* 

数据在内存中以二进制形式存入一块空间中,&操作是将这块空间的地址取出来。

而指针指向的就是一块地址,所以将这块空间的地址存入指针中

我们再讨论一下:指针的类型
我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?
准确来说:是有的。
当有这样的代码:

int a =10;

pa = &a; 
要将&a(a的地址)保存到pa中,我们知道pa就是一个指针变量,那它的类型是怎样的呢?

答案是int *


这里可以看到,指针的定义方式是: type + * 。

比如:

char * ch = NULL;

float * pf  = NULL;
其实:
char* 类型的指针是为了存放 char 类型变量的地址。
float* 类型的指针是为了存放 float 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址。
 


指针运算、数组和指针的关系

 一、指针+-整数

指针加减整数就是对地址进行操作,把指向的地址往后移动。

这里可以把指针比作“箭头”来理解

图示:>

定义int p =10;此时在内存中开辟了一块空间存放p

pa是指向p的指针,所以pa指向p的地址

 如果让pa++呢?

则往后移动一格。

但是,一格有多大呢?

答:取决于你的数据类型

数据类型
char 字符数据类型1字节
short  2字节
int  4字节
long  4字节
long long  8字节
float 占4字节
double 占8字节

图示:>

 解析:

一般情况下:数组名是数组首元素的地址(数组名就是一个指针)

两种特殊情况:sizeof(数组名)和&数组名(本文后面再说)

pa指向arr首地址(也就是数组中的第一个元素1)

由图中左下角可以看出pb和pa间相差4,为什么呢?

因为int类型占四个字节,往后移动一次,地址值就加4。

c1指向str的首地址(也就是dog的第一个字符'd')

c2指向第2个字符'o'

为什么c1和c2只差1呢?

因为char类型占一个字节,往后移动一次,地址值加1。

 数组和指针可以相互表示:

int arr[3] = {1,2,3};

int *pa = arr;

那么*(pa+i)和arr[i]就是等价的

附加:如何用函数交换数据的值?

指针指向地址,到底什么意思?

 此时你发现并没有交换成功,为什么?

我们进入监视窗口看一看:>

由下图可知:

x和y确实交换成功了,但是a和b并没有进行交换。

因为在swap函数中,我们只是把a和b的值赋给了x和y,然后让x和y进行交换。

那么,如何让a和b交换呢?用指针!!

 交换a和b值,只需要把a和b的地址传过去,交换a和b的地址。

解析:>

由于传入的是x和y的地址,所以函数中用int *类型的x和y接收

如何进行交换即可。

 

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...