前面带你们讲了讲函数,接下来带大家学习一下指针。
从这三方面带大家认识指针。
一.什么是指针
我们前面说过整形,整形是存放整数的,那指针是存放什么的呢?我们往下看
1.内存和地址
我们知道在一个小区里面找到一个人的家需要知道人家再几栋几单元几零几,
那我们怎么再计算机中找到我们的整形呢?
这些整形,浮点型数据存放在哪里呢?
其实这些整形变量都有它的位置,我们叫做它地址。
而地址存放在内存当中。
(1)内存
内存的单位是内存单元,1个内存单元占1个字节也就是8个比特位
1个比特位存放一个二进制1或者0
1个字节(byte)内存放8个比特位(bit)
再vs中分x64(64位平台)和x86(32位平台)
这两个区别就是内存大小不同
我们知道每个房间都有房间号便于找到位置,一般有多少门牌号就有多少房间
内存被内存单元标记,
64平台就相与内存单元有2^64个,32平台就相当于内存单元有2^32个。
(2)地址
那地址又是什么呢?
内存相当于一栋楼,而内存单元相当于每个房间,地址相当于每个房间的房间号。
如果再32位平台,第一个内存单元如果用二进制的地址标记一个内存单元标记是下面这样
这样标记很麻烦,所以地址不这么标记而是像下面这样
地址将以16进制的形式记录一个字节或一个内存单元位置,如下
再32平台下,1个内存单位的地址的大小是4个字节,也就是32个比特位
再62平台下,1个内存单位的地址的大小是8个字节,也就是64个比特位
为了让你能更好的理解内存,内存单位和地址看下面的图片。
(2)指针和地址
说了那么半天的地址,那地址和指针有什么关系呢?
前面我说到整形变量的存储其实就是放在内存单元(字节)的,我们知道vs上整形占4个字节
也就是4个内存单元,这4个字节(内存单元)都有它的地址,指向着这个地址叫做指针。
可以说指针就是地址,地址就是指针。
二.指针的样子
前面说过指针是存放某某(各种类型)地址,所以指针和它存放的类型有关
如何拿到整形的地址呢?
我们需要了解一个操作符
1.取地址操作符(&)
取地址操作符听名字就知道是,取出地址的符号
还记得我们前面的scanf(库函数),头文件是stdio.h
这个函数为了输入某类型的值
大家应该了解了取地址操作符
2.指针的样子
先让大家了解指针的样子后面会详细说的
先看看存放整形(int)样子
再看看存放字符(char)样子
如果是想要int类型的指针就用int *类型的指针接收,
是char类型的指针就用char *类型的指针接收
三.指针的类型
指针存放的是某某类型的地址,存什么类型就是什么类型的指针
1.某某类型指针
(为了了解后面会一个一个讲)
(1)整形指针
比如上面所见到的整形指针(指针指向的整形),也可以说指针存放的类型是整形的地址
我们前面还讲过浮点型,字符型这两个和上面的相似。
———————————————————————————————————————————
除了这些类型,前面我们还提到过数组,函数是不是还有数组指针,和函数指针呢?
答案是是的
(2)数组指针和指针数组
提到数组指针多数都是离不开指针数组的
数组指针
数组指针离不开本质指针指向的数组,也就是说指针存放的是数组的地址。
arr类型是int [10]
p的类型是int (*) [10]
所以int 先与[10]结合再赋予指针,这样就是数组指针
指针数组
指针数组离不开本质数组里面的元素是指针
p的类型是int * [5]
所以int 先与 * 结合再赋予数组,这样就是指针数组
(3)函数指针和函数的返回类型是指针
函数指针
函数指针本质是指针(指向的是函数),也就是说存放指针的地址
fun的类型是int (int,int)
p类型是int (*) (int,int)
这个就是和上面的相似,能理解它是函数指针吧
返回类型是指针的函数
这个就比较好理解了函数返回类型是指针也就是地址
这个比较好理解了
fun两个参数是(int,int)返回值是int*
2.void*类型的指针
表示无具体类型的指针
void*类型的指针可以接受任意类型的地址,但是无法直接的进行计算
如果需要进行计算,需要强制类型转化,使得可以一个函数可以处理多个数据
3.const修饰的指针变量
conse修饰指针变量不能被修改,具体后面会讲的先明白有这个东西
4.野指针
野指针就是没有固定位置的或者说没有具体地址的指针,地址是随机变化的指针,这样的指针
用起来很危险,因为不知道它的位置
(1)野指针的成因是指针变量没初始化(没存放地址)
这样的p就是野指针
———————————————————————————————————————————
今天就了解这些,下次带大家继续了解,
会以指针变量的解引用操作,const修饰的变量,指针变量的运算,使用指针变量的好处等等。
标签:int,拿捏,地址,内存,数组,类型,愿带,指针 From: https://blog.csdn.net/huiyi_jiu_shiyi/article/details/139663208