初阶指针。

指针是什么?

简单来说指针就是地址,我们平常口头上说的指针常常指的是指针变量

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

这里的*p就是一个指针变量,我们通过当a的地址赋给p然后通过解引用操作符*将a的值改成20。

像整型浮点型等这些都有相应的字节大小,那么指针变量的大小是多少呢??

由图可知char类型的指针和int类型的指针的大小都是4个字节,但这是在你的电脑支持32位虚拟空间的值,如果你的电脑是64位的话就是8个字节、如果是在vs里面X86下是4个字节,但X64则是8个字节

虽然各种类型的指针都是4个字节(按X86下来说)但是每种类型的作用都有不同我们来看下面这两段代码

#include<stdio.h>
int main()
{
    int a = 0x11223344;
    int* p = &a;
    *p = 0;
    return 0;
}
#include<stdio.h>
int main()
{
    int a = 0x11223344;
    char* p = &a;
    *p = 0;
    return 0;
}

首先第一段代码我们开始调试通过内存窗口发现所有都变成了0但到了第二段代码时我们发现就只有最前面的一个字节变成了0由此我们可以发现int类型指针能操作4个字节,但char类型的指针就只能操作一个字节了,因此,指针类型决定了在被解引用时的访问权限还决定了指针向前或者向后走一的步的距离。int类型则时走4个字节,char则是1个字节

 野指针

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化对于野指针我们应该要注意以下几点

1:指针初始化

2:小心指针越界

3:指针释放即置NULL

4:避免返回局部变量地址

5:指针在用前检查有效性

指针的运算

指针加减整数

通过指针和整数之间的运算达到访问数组的目的

指针和指针之间

指针和指针相减得到的是两个指针之间元素个数的绝对值但是前提是两个指针必须是要指向同一块空间的,比如下面的代码

数组名

数组名就是数组首元素的地址,但有两个例外

1:sizeof(数组名)此时表示整个数组的大小

4*5=20,所以是全体数组的大小

2:&数组名此时取出的则是全体数组的地址

 

 由图可知当&数组时+1跳过的时整个数组

 二级指针

此时的pp则是一个二级指针

 

 指针数组

 这里的arr就是一个指针数组,里面存放的时指针;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值