指针是什么?
指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址可以找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象的称为“指针”。意思就是通过它能找到以它为地址的内存单元。
(以上都是教科书式答案)
总结一下就是:指针是个变量,存放内存单位的地址(编号)。
一个小的单元到底是多大?(一个字节)
对于32位的机器,假设有32位地址线,那么假设每根地址线在寻址的时候产生一个电信号正电/负电(1或0)那么32根地址线产生的地址就会是:00000000000000000000000000000000~11111111111111111111111111111111(32个0-32个1)
,这里就有2^32次方个地址,每一个地址标识一个字节,那么就是4GB的空闲进行编址。
总结:
指针是用来存放地址的,地址是唯一标识一块地址空间的。
指针的大小在32位平台是4个字节,在64位平台是8个字节。
指针和指针类型
指针的类型有很多,定义指针的方式是:变量类型 + *
例如:
char*/int*/short*/long*……
char*类型的指针是为了存放char类型变量的地址,int*类型的指针是为了存放int类型变量的地址。
指针类型的意义是什么?
总结:
指针的类型,决定了指针向前或向后一步有多大距离。
“*”是解引用操作符,*p可以取出n地址所在的单元内存中的数据。
指针的类型决定了,对指针解引用的时候能操纵的字符数,比如:int*的指针解引用就能访问4个字节。
野指针
野指针就是指针指向的位置是不可知的,是随机的。
野指针的成因:
1.未初始化
比如:直接在函数中定义 int* p;//没有赋初值,默认为随机值
2.指针越界访问
比如:
所以大家定义的时候一定要记得初始化、小心指针越界,使用之前检查指针的有效性哦~
指针的运算
这里需要注意,指针的关系运算是有规定的!!!
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
指针和数组
数组名表示的数组首元素的地址。
我们可以通过指针来访问数组。