指针

          指针是C语言管理内存的强大工具。

     1.指针变量的声明

       指针可以视为一个普通变量,通常所说的定义一个指针其实就是一个声明指针变量的过程,编译器根据指针变量声明语句,为指针变量开辟内存空间,使其有实际意义,这样指针变量才可用。

      在声明一个指针变量时,需要向编译器提供以下信息: 

       指针的类型原则上,指针的类型应与其所指向的数据类型一致,但也有例外。

       指针变量名。

       举例来说,下述语句用于声明一个指向int型数据的指针pInt:

       int* pInt;

       不难看出,要声明一个指向某种类型的指针变量,其基本形式为:

      类型* 指针变量名;

      int* p1=NULL;(NULL是C语言中预定义的空指针关键字)

  

    1.2 指针变量的初始化

        在声明一个指针后,编译器不会自动为其完成初始化。此时,指针的值是不确定的,也就是说,该指针的值取决于指针所在的内存区域的值,而该值是完全随机的。因此,指针变量的初始化十分重要,直接使用未加初始化的指针变量,可能会给程序带来各种内存错误,因为完全不知道指针指向的是哪一块内存,通过指针操作的又是哪块内存。

     如果在指针变量的声明之初确实不知道该指针变量指向何处,最简单的方式就是将其置为“0”,C语言中提供的关键字NULL,例如int* p1=NULL;这样,指针便不会在内存中乱指一气了。

    如果想要指针变量确切的指向某个变量,需要使用取地址操作符&。

   

    1.3 指针变量的值

    “指针变量的值”是指针本身存储的数值,这个数值将被编译器作为一个地址,而不是一个一般的数值,在32位程序里,所有的类型的指针的值都是一个32位整数,因为32位程序里内存地址的长度都是32位。“指针所指向的内存区”就是从指针的值所代表的那个内存地址开始的,长度为sizeof(指针所指向的数据类型)的一片内存区。

   “一个指针的值是A”,是指“该指针指向了以A为首地址的一片内存区域”;反之,说“一个指针指向了某个内存区域”,是指“该指针的值是这块内存区域的首地址”。


   1.4取地址操作符

       声明一个变量时,为该变量开辟内存空间的任务是由编译器自动完成的,用户不需要关心变量在内存中的位置。但是,如果,在程序中用到了某个变量的地址信息,则该怎么办呢?C语言提供了取地址运算符&返回某个程序实体的地址信息,举例来说

      int num = 0;

      int* p = #

     &num返回的是变量num在内存中的地址信息,可以直接将此值付给同类型的指针P。


    1.5指针变量占据一定的内存空间

        指针变量声明后,编译器为其开辟一定的内存空间,即指针变量占据一定的内存空间,而且,不论是何种类型的指针,都占据4个字节(这是由32位地址数据决定的)。

      

    1.6指向指针的指针

       指针变量也是变量,占据一定内存空间,有地址。因此,可以用一个指针指向它,这称为指向指针的指针或者二级指针。可以通过“**”声明一个二级指针。

   

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值