美文网首页
指针笔记(重点)

指针笔记(重点)

作者: 飞向大海的菜鸟 | 来源:发表于2016-07-27 11:21 被阅读25次
    • 指针定义

    指针的本质也是一个变量

    指针存放的是变量的地址
    int a = 10;//定义一个a变量
    int *p = &a;//定义一个指针变量p,存放的是a变量的地址

    指针变量是8个字节的整数

    *(解引用运算符)
    char ch = 'W';
    char s;
    char *p = &ch;
    s = p;//p在等号右边,把p指向变量ch的值取出来
    p = 'M';//p在等号右边,往p指向的变量内存中写入内容
    &(取地址运算符)

    • 指针初始化

     如果一个指针没有初值化,这样的指针是野指针,里面存放的是垃圾地址
    

    初始化直接把一个变量的地址赋给一个指针,不确定时就初始化一个空指针
    int a = 23;
    int p = &a;//直接给指针变量赋个变量的地址

       int *q = NULL;//给指针变量赋个空地址0x0;
    

    注意:不要解引用一个空指针,会发生段错误!因为0号地址属于系统级的内存,不允许用户级程序访问。

    • 指针与函数

    1.指针作为函数的参数

    形参是实参的拷贝,更改形参的值不会改变实参的值;传指针调用不是改变实参的值,而是通过形参改变实参指向变量的值。

    2.函数返回一个指针变量
      #include <stdio.h>
    
      int *simaller(int *p, int *q)
      {
         return (*p > *q ? q : p);//返回的是一个指针(地址编号)
      }
      int main(int argc, const char * argv[])
      {
        int a = 15, b = 20;
        int *p;
        //调用函数返回最小值的地址
        p = simaller(&a, &b);//用指针变量p接收
        printf("%d\n", *p);
        return 0;
      }
      输出结果为:15
    
    3.函数指针
       #include <stdio.h>
      double (*fpfunc)(double a, double b);
      double add(double a, double b);
      double sub(double a, double b);
      int main( )
      {
          fpfunc = add;
          printf("%d\n", fpfunc(3.6, 4.8));//等价于add(3.6, 4.8)
    
          fpfunc = sub;
          printf("%d\n", fpfunc(8.5, 3.7));//等价于sub(8.5, 3.7)
          return 0 ;
          }
         double add(double a, double b)
         {
            return a + b;
         }
    
         double sub(double a, double b);
         {
            return a - b;
         }
    
    • 指针与数组

    数组名字,就是数组的首元素的地址(数组首地址)
    数组名是一个指针常量,存放的地址不能更改

        double b[5];
        double *p = b;
        printf("%p %p %p\n", b, p + 0, &b[0]);//三个结果相同,都是a[0]的地址
        printf("%ld %ld\n", sizeof(b), sizeof(p + 2));
    

    可以通过下标和指针两种方式遍历数组元素

    指针数组(数组中的元素是地址编号)

    指针数组的定义:
    类型名 *数组名[数组长度]
    char str[10] = "HelloBJ";
    char *ps = str + 3;//str + 3是str[3]的地址
    printf("%c ", *str);//等价于str[0]
    printf("%c ", *ps);
    printf("%ld\n", ps - str);//ps - str 表示ps 和 str 之间相隔了多少个类型长度
    输出结果为:H l 3

    • 指针常量和常量指针

    Snip20160727_1.png

    相关文章

      网友评论

          本文标题:指针笔记(重点)

          本文链接:https://www.haomeiwen.com/subject/btfojttx.html