指针

指针

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。这个是百度百科解释。其实我们只要将指针想象成一条绑着石头的绳子,绳子的一端是这个指针变量,绳子的另一端就是指向的数据地址。(图中指针指向数据1)
指针解释

指针定义

指针也是一种数据类型,它的定义方式和他们一致,都是要先声明类型,再定义变量。指针内部也是分整型指针(int*),浮点型指针(float*),字符型指针(char*)等。对应数据类型指针指向对应数据类型数据,不然会出现警告,读取数据也会出错。

    int* ptr;                           //定义指针变量
    int a = 20;                         //定义整型变量
    printf("a = %d\n",a);               //打印a的值
    ptr = &a;                           //指针与数据关联
    *ptr = 10;                          //通过指针修改数据
    printf("a = %d,*ptr = %d\n",a,*ptr);//打印a的值,*ptr的值

结果呈现
&:取址符 &a表示把a的地址拿到。
指针在定义时的指向未知,我们要把想要指针指向的数据的地址拿到,然后让指针指向这个地址(ptr = &a),就可以通过指针间接修改a的值(*ptr = 20),可以想象指针有指向后,(*ptr)可以顺着绳子找到a,就可以修改a。
过程讲解

指针大小

指针与普通数据类型一样,也有自己的内存空间。整数类型指针,还是字符类型指针都统称为指针,字节大小都一致。指针在32位平台上是4个字节,在64位平台是8个字节大小。
32位平台

判断带有*时是定义还是赋值

这个主要看*前面有无数据类型的定义,如果有就是定义,没有就是操作指针指向的内存。

    int a;
    int* ptr;  //前面有int数据类型,为定义
    ptr = &a;
    *ptr = 10; //前面没有数据类型,为操作指针内存

ptr与*ptr的不同

ptr是一个整型的指针,他是一个变量,可读可写。*ptr是指获取ptr指向的数据,这是一条指令,不是一个变量。两者是完全不同的东西。

    *ptr;         //无意义
    *ptr = 2;     //间接修改值
    int b = *ptr; //将指针指向的数据赋值给变量

ptr与*ptr

指针的使用

在c语言的学习中,指针占7成左右,指针是c语言的灵魂,学会指针,c基本就可以出师。指针在数组指针,指针数组,函数指针,作为形参指针传值,链表的使用等都可以用到。

注意事项

在使用指针时,需要注意的是不能操作非法内存,就是不能有操作野指针的存在(指向非法内存的指针),否则会造成段错误(段错误就是指访问的内存超出了系统所给这个程序的内存空间)。就是在指针没有指向实际的可操作内存时,使用指针间接修改内存就会造成段错误。这个问题是很严重的,操作非法内存会出现一系列错误,要杜绝这个问题的出现。在大部分涉及指针的程序出错基本就是这个问题。
解决办法就是指针赋初值为空,在需要操作内存时判断是否为空,不为空则操作内存。

    int* ptr = NULL;  //赋初值为空
    if(ptr != NULL)   //判断是否为空
    {
        *ptr = 10;    //不为空则操作内存
    }

指针的简单介绍到此结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值