c语言指针初阶

目录

二,指针和指针类型

三,野指针

3.1野指针成因

3.2如何规避野指针

 四,指针的运算

五,指针和数组

六,二级指针

七,指针数组


一,指针的定义

指针就是地址,口语中说的指针通常指的是指针变量。

注:指针的大小在32位平台是4个字节,在64位平台是8个字节

二,指针和指针类型

指针的形式:type+*              比如:char*

指针类型的意义:

1,不同的指针步长不同:int*+1走四个字节,char*+1走一个字节

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

补充:经过实验发现,变量的地址,其实就是低地址字节的地址,比如0x11223344,其中44存储在较低的地址的字节中,那么整个数据的地址就是44的地址,如果用char*访问,也是从44开始访问

三,野指针

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

3.1野指针成因

1.指针未初始化。

2.当指针指向的位置超出数组范围的时候,就会变成野指针。

3,指针指向的空间被释放,比如说:一个指针指向函数内部的局部变量,在函数调用完毕后,局部变量所占用的内存被释放,指针变成野指针。

3.2如何规避野指针

1. 指针初始化
2. 小心指针越界
3. 指针指向空间释放,及时置NULL
4. 避免返回局部变量的地址

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

 四,指针的运算

4.1指针加减整数:走步长

4.2指针减指针:得到的是两个地址之间的元素个数

4.3指针的关系运算

允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与
指向第一个元素之前的那个内存位置的指针进行比较

五,指针和数组

已经很熟悉了,需要说的是:arr[i]==*(p+i)==*(i+p)==i[arr],,可能你觉得这很奇怪,但是实际上[]只是个操作符,i和arr也只是个操作数而已,没有规定说必须写成arr[i]。

 所以 p+i 其实计算的是数组 arr 下标为i的地址,即*(p+i)==arr[i]

六,二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?

int a=10;

int * pa=&a;这里*pa代表指针,int 说明指针指向int类型

int*  * ppa=&pa;这里*ppa代表指针,int*说明指针指向int*类型,也就是指向指针。

七,指针数组

指针数组是一个存放指针的数组。例如:int*   arr[]={&a,&b,...............};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值