零基础C语言学习

               *c语言学习笔记(十七)*

初识指针

关于指针是什么,网上有很多概念,但是简而言之,指针就是用来存放内存单元地址的变量。
一、指针和指针类型
首先就是指针类型可以有很多种,但是指针变量的大小是跟平台有关的,32位平台就是四个字节,64位平台就是八个字节。
那么不同类型的指针有什么作用呢

int a = 10;
int* pa = &a;
char* pc = &a;
printf("%p ",pa);
printf("%p ", pc);

在上面的代码中,定义一个整形和一个字符型指针,但是输出结果。两个指针指向的是同一个地址(当然这是应该发生的)
但是当我们通过*进行解引用操作时,不同类型的指针就会产生不同的结果;
通过调试监视窗口,我们发现int型和char型的区别(注意红色字部分为存放a的具体值);
char型:
在这里插入图片描述
int型:
在这里插入图片描述
通过上面的例子,我们知道了不同类型的指针“权利”使用是有大小区别的,对于int型的指针,在进行解引用操作时,他的权利是修改四个字节的内容,而char型指针则只能对应修改一个字节的内容。
指针类型决定了指针进行解引用操作时,能够访问的空间大小
指针的另一个意义:指针加减整数
下面一段代码:

int a = 0x11223344;
int* pa = &a;
char* pc = &a;
*pa = 0;
printf("%p\n ",pa);
printf("%p\n ",pa+1);
printf("%p\n ",pc);
printf("%p\n ",pc + 1);

在进行指针加减时,不同类型的指针也会得到不同结果
在这里插入图片描述
从结果中可以发现,int型的指针加一时,地址增加了4,而char型指针+1时,地址增加了1;在32位平台下,地址增加4,也就意味着地址跳过了四个字节,刚好是一个整型的大小,后面的char型指针也是如此道理。
所以,指针类型也决定了指针加减时所对应的行程。
二、野指针
概念:野指针就是指针指向的位置是不可知的。
野指针成因
1、指针未初始化,假设我们定义了指针,但是没有给他赋予地址

int*pa;

这个指针就是个野指针。
2、指针越界访问
例如定义数组指针,当指针超出了数组范围时,指针就成为了野指针。
3、指针指向的空间释放
这里是指当我们给局部变量创建指针时,由于局部变量的作用域,那么当局部变量超过作用域时,局部变量内存空间被释放,此时的指针也就成为了野指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值