美文网首页
NDK启航篇——C语言基础(指针)

NDK启航篇——C语言基础(指针)

作者: 爺珍爱那颗心 | 来源:发表于2020-03-27 21:54 被阅读0次
    ndk
    NDK启航篇——C语言基础

    昨天已经介绍了下什么是指针,今天继续讲指针

    为什么指针要有类型

    • 因为类型不同的指针所取的内存长度不同,取值会出现问题,比如int 类型的指针,接收double类型的变量地址。
    //尖括号代表系统类库,std表示标准,io表示输入输出 引入标准输入输出
    #include<stdio.h>
    //lib表示类库 引入标准类库
    #include<stdlib.h>
    main(){
      int a = 10;
    //取出a的地址,赋值给指针p
      int *p = &a;
    //#x表示十六进制,取出a的地址
      println("%#x",p);
    //取出a地址里存的值
      println("%d",*p);
      double j = 34.1;
      p  = &j;
    //#x表示十六进制,取出j的地址
      println("%#x",p);
    //取出j地址里存的值
      println("%lf",*p);
      system("pause");
    }
    

    如上代码运行你会发现取出来的值为0.00000,原因就是指针的类型不匹配(通过4字节读取8字节的内容)

    空指针(NULL)

    • 空指针的默认值为0
    • 操作系统不准许访问内存地址0X000000
     void main(){
        int i = 10;
    //定义一个空指针j
        int *j = NULL;
    //#x表示十六进制,取出j的地址
        printf("%#x\n",j);
    //取出j地址里存的值
        printf("%d\n",*j);
        system("pause");
    }
    

    多级指针(二级)

    • 指针保存的是变量的地址,保存的这个变量还可以是一个指针变量
    void main(){
    //定义一变量i
      int i = 10;
    //把i的地址赋值给j
      int *j = &i;
    //把j的地址赋值给k
      int **k = &j;
    //k存的j的地址,j上存的i的地址
      printf("j:%#x,k:%#x\n",j,k);
    //加一个*是i的地址,加两个*是i的值
      ** k = 20;
      printf("%d\n",i);
      getchar();
    }
    

    加一个*是i的地址,加两个*是i的值(最多三级指针)

    • 使用场景
      • 动态内存分配
      • 二维数组

    指针运算(对数组的操作)

    • 注意C中数组[]必须写在变量名的后面!
    • 数组变量名:i就是数组的首地址
    • 数组在内存中是连续存储的
    • 数组变量名++向前移动sizeof(数据类型)个字节
    • 数组变量名--向后移动sizeof(数据类型)个字节
    void main(){
      int i [] = {11,12,13,14,15};
    //数组变量名:i就是数组的首地址
      printf("%#x\n",i);
      printf("%#x\n",&i[0]);
    //数组的变量名就是地址
      int *j = i;
      printf("%d\n",*j);
    //指针加法
      j++;//j++向前移动sizeof(数据类型)个字节
      printf("%d\n",*j);
      getchar();
    }
    
    • 使用场景
      • 一般在数组遍历时才有意义
      • 因为数组在内存中是线性排列的
    • 通过指针给数组赋值代码如下:
    void main(){
    //定义有五个元素的数组i
      int i [5] ;
    //把数组i的地址赋值给指针j
      int *j = i;
    //数组的值
      int k = 0;
    //通过指针给数组赋值
      for(;j<i + 5;j++){
        *j = k;
        k++;
      }
    }
    

    今天就先到这里啦,明天继续写函数指针,欲速则不达,慢慢来不着急。

    相关文章

      网友评论

          本文标题:NDK启航篇——C语言基础(指针)

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