关于指针的入门

目录

部分操作符优先级

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

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

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


部分操作符优先级

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

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

理解指针:

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接收

如何进行交换即可。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值