指针初阶

指针

一.指针是什么?


1.了解指针要先知道什么是内存
内存就是电脑上的存储设备,一般是4/8/16G(运行内存)
而平时说的528gb/1tb的是硬盘
程序运行的时候会加载到内存中,也会使用内存空间
内存被分为一个一个的小格子(小房间),一个格子为一个内存单元大小为一个字节,有自己单独的编号
只要知道内存编号就能找到内存单元
内存编号在生活中叫做地址,在c语言中叫做指针

2.int a=10
&a——对a取地址,取出a的地址
a是一个整型变量,占四个字节,每个字节都有地址,&a取出的是第一个字节的地址(较小的地址)
int* pa=&a (pa就被称为指针变量)
指针变量是一种变量,是专门用来存放地址的

应用:

指针(地址)的大小在32位平台是4个字节,在64位平台是8个字节

二.指针和指针类型


因为char类型占1个字节,int类型和float类型占4个字节

2.指针类型决定了指针的步长(指针+1到底跳过几个字节)
字符指针+1跳过一个字节,整型指针+1跳过四个字节

三.野指针(很危险)

概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没用明确限制的)

野指针成因:
1.指针未初始化

2.指针越界访问

3.指针指向的空间释放


这里打印p的地址的时候test函数的局部变量已经销毁了,所以打印出来的将不是10

如何避免野指针?

1.指针初始化

2.小心指针越界

3.指针指向空间释放,及时置NULL
当不知道指针指向什么地址时,这样初始化指针: 


此时指针不能直接用,应该这样写

4.避免返回局部变量的地址

5.指针使用之前检查有效性

四.指针运算

1.指针±整数


这个代码就是把values这个数组全部变成0

2.指针-指针
前提:两个指针要指向同一个空间,且两指针类型应该相同
指针-指针的绝对值得到的是两个指针之间的元素个数
列:


这个代码运行的结果是9


这个代码运行的结果是-9

应用:写一个判断字符串长度的函数

原始方法:

用指针-指针来写:

五.指针的关系运算(比较大小)


可以往后越界去比较,不能往前越界去比较

六.指针和数组

1.指针和数组是不同的对象
指针是一种变量,存放地址的,大小4/8字节的
数组是一组相同类型元素的集合,是可以放多个元素的,大小是取决于元素个数和元素的类型的

2.数组的数组名是数组首元素的地址,地址是可以放在指针变量中
可以通过指针访问数组

七.二级指针

是什么?


解应用操作:**ppa=*pa=a

作用:存放一级指针的地址

八.指针数组

指针数组就是存放指针的数组
概念:

应用:使用一维数组,模拟一个二维数组

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值