C语言指针

指针是c语言中难度稍微高的一部分内容,同时也是为后续学号数据结构打基础,接下来就让我们进入指针的学习。

指针是什么

在计算机科学中, 指针 Pointer )是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“ 指针 。意思是通过它能找到以它为地址的 内存单元
指针是个变量,存放内存单元的地址(编号)。
总结指针就是变量,用来存放地址的变量。
既然指针是变量,那么指针的大小是多少呢?
指针的大小在 32 位平台是 4 个字节,在 64 位平台是 8 个字节(在32位机器上,地址是32个0或1组成二进制序列,需要4个字节的空间存储;64位机器上需要8个字节的空间存储)

指针和指针类型

指针的类型列举为以下几种:

不同类型的指针用于存放不同类型变量的地址:int* 类型的指针是为了存放int 类型变量的地址。

那么指针类型的意义是什么呢?

总结:指针的类型决定了指针向前或者向后走一步有多大(距离)

指针解引用

通过观察以上调试窗口内存的变化,我们发现类型为int*时,当解引用时一次访问四个字节,而char*一次只访问一个字节。

总结: 指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。 比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

野指针

概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量
在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一
个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果不可知。
野指针成因
1.指针未初始化。
2.指针越界访问。
3.指针指向的空间释放
规避野指针:
1.指针初始化
2.小心指针越界
3.指针指向空间释放即置NULL
4指针使用之前检查有效性

指针的运算

指针+- 整数
指针-指针
指针-指针得到的数值的绝对值:是指针和指针之间的元素个数。
指针的关系运算
地址是有大小的,指针的关系运算就是比较指针的大小。
数组地址是由低到高的,所以vp地址大于数组首元素地址,即比较指针大小,代码会将vp指向的数组元素赋值为0,然后vp往前移动。

指针和数组

数组名是什么?

从以上代码我们可以看出数组名即是数组首元素地址。那么我们就可以写出下面的代码。

p+i计算的是数组arr下标为i的地址。

我们就可以直接通过指针来访问数组:

二级指针

指针变量也是变量,那么是变量就有地址,指针变量的地址存放的位置就是二级指针。

通过二级指针同样可以找到指针变量pa也就是找到a,所以同样可以打印出10。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值