指针

指针

前言

本博客中,有一部分内容参照了以下书籍中的内容:

《C++从入门到精通》:

7.4小节指针(P131)
7.5小节指针与数组(P140)

《信息学奥赛课课通(C++)》

第八单元第一课 指针的概念(P278)
第八单元第二课 指针的引用与运算(P285)
第八单元第三课 指针与数组(P291)

《小学生C++趣味编程(下册)》

第八单元第80课 今雨新知——地址与指针(P324)
第八单元第81课 民主选举——指针与数组(P327)

注:本博客内容不侵权

指针概念

故事

一天,小A从小B这里借走了一本书📕,可是当小A来还书的时候,小B不在家。于是小A把书放到了书架第3区,并写了一张留言条,内容是“第3区”。当小B回来时,就知道这本书📕在哪里了。
这张留言条相当于一个指针,它的内容不是书📕的内容,而是书的位置,这样,就可以通过留言条(指针)找到书📕(值/变量)了。

指针图像

一般计算机内部的“书架”(内存)是这样的:
在这里插入图片描述
指针指向变量时就是这样的:
在这里插入图片描述

指针套娃

指针最有趣也最能把程序员搞懵B的地方就是套娃指针,普通指针指向普通变量,而指针指针变量指向普通指针,这是因为普通指针毕竟它也是个变量嘛,所以得有地址,这一有地址,就有指针可以指向它。比如说指针指针变量不也可以被指针指针指针变量指向吗。是不是把你搞懵B了?
在这里插入图片描述

指针运算

这可能是一个比较难的地方。比如p是一个指针,地址是0091,要想知道p的下一个地址,就要用p+1,更往下就是p+2、p+3……上面的地址,p-1、p-2、p-3……以此类推。
不过千万不要再指针运算时在指针明前加’*’,如果变成了*p+1,那就是要求p所指向的地址所存储的值加一的结果了,而不是一个指针了。

指针与数组

指针有用的地方就是和数组的融合,大家看一看我的《函数的参数和返回值》中的前言里的int *??? = new int[???];,就知道这是定义了一个指针但是其实是一个数组,也就是说指针和数组是一个概念(好可怕啊)。这就是最不好理解的地方了(我个人理解)。
在这里插入图片描述
这地方也涉及到了指针运算。

指针程序

定义

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int *p;
	return 0;
}

很简单,是不是?

赋值

  1. 定义时赋值
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a;
	int *p = &a;
	return 0;
}
  1. 后来赋值
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a;
	int *p;
	p = &a;
	return 0;
}

大家简简单单就能看出,’&'是取地址运算符。
不过指针不可以赋值为数值,只能赋值为地址。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int *p = 100; // 报错
	return 0;
}

如果是强制转换,没办法获取该地址的值。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int *p = (int *)100;
	cout << *p << endl; // 报错
	return 0;
}

另外指针没法当普通变量用。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int *p;
	*p = 100; // 指针没得到地址
	cout << *p << endl; // 报错
	cout << p << endl; // 报错
	return 0;
}

小结

指针变量很有趣,数组和它有关联。
定义赋值有规矩,’*’’&'符号不能忘。
赋值错误大学问,强制转化也不行。
指针不能没地址,指针套娃真奇异。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值