初识C语言指针

指针的基本用法

指针?什么是指针?重根本上看,指针是一个值为内存地址的变量(或数据对象),例如

int类型变量的值是字符,而指针变量的值是地址。

声明指针:类型 + * +变量名(int * p)

int a = 0;

int * p = &a;p指向a的地址,指针变量p储存的是地址

用*p  取出存储的数据,也可以重新给*p重新赋值改变变量a的值

指针类型的意义:

不同类型指针存储的空间大小不同,char类型占1个字节,int类型占4个字节。地址向后+1跳过的长度不同,char类型跳过1个字节,int类型跳过4个字节

   

三·void*指针(空指针)

void指针可以接收所有类型指针的地址,但不能进行解引用操作(只能接收,不能发出)

四·const修饰指针变量()

const修饰指针有两种格式:

1·在*前 int const * p(const在前指针p可以改变存储地址,但不能对解引用操作赋值)

2·在*后 int * const p(const在后p不能改变存储地址,但可以进行解引用操作)

五·指针- 指针(只能在同一数组里进行)

指针 + 整数  = 指针     指针 - 指针 = 整数(往后跳了n*(p+1)个)

六·求字符串长度

字符串的最后一个元素是结束符号\0,而arr传入的是起始地址,那么我们可以写一个循环,若解引用不是结束符号\0,这地址跳到下一个位置直到跳到结束符终止,代码如下

七.野指针

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

出现的原因

1.指针未初始化

例如

int main()
{
    int* p;
    *p = 20;
    printf("%d", *p);
    return 0;
}//便会报错

2.指针越界访问

代码如下

可以看到我们最后多打印了一个随机值理由如下

指针越界访问了,超过了数组的范围,所以打印了随机值

3.指针指向释放了的空间

例如

#include<stdio.h>
int * text()
{
    int a = 6;
    return &a;
}
int main()
{
    int* p = text();
    printf("%d",*p);
    return 0;
}

创建了一个局部变量a,当a出了text函数时变量已经销毁,再次访问时就是非法访问了

如何避免野指针呢

1.一定要初始化指针变量

2.当变量不用时及时置空,置空用NULL;例如int * a = NULL;(NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址 会报错)

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

4.小心指针越界访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值