• 指针


    ---恢复内容开始---

    1.指针的兼容性

    指针类型和指针指向的类型应当是一致的,例如:int类型的指针指向float类型数据会报错。

    数组名称是指向数组的指针,即:和数组首元素的地址相同。

    int *p ;

    char c = ‘a’;

    p = & c;//int 类型的指针指向4个字节的内存空间,char只有一个字节,所以剩余的3个字节全部生成随机数

    int a = 10;

    char *p = &a;//指针p指向a这块内存空间的首地址;

    2.常量指针和指针常量

    const int *p;

    int a = 10;

    p =&a;     //*p = 12错误,因为指针指向的是一个常量,不能使用指针修改其值。

    int *const p ;

    int b = 10;

    p = &a;

    *p ==10;*p = 20;//常量指针能够读取指向的值,也能修改指向的值

    p = &b//错误    因为常量指针不能改变其指向。

    网络传输过程中IP地址总是以4个字节表示;通过int a及char类型指针遍历。

    3.字符数组合并

    char arr1[20] = "hello";
     char arr2[10] = "world!!";
     char *p1 = &arr1[0];
     char *p2 = &arr2[0];
     while (*p1++);  //表示解引用获得其值,然后指针++
      //(*p1)++ 表示先解引用再++
     
     while (*p2)
     {
      *p1 = *p2;
      p1++;
      p2++;
     }
     for (int i = 0; i < 20; i++)
     {
      printf("%c", arr1[i]);

    4.指针数组

    short *p[10];

    char *p2[10];

    int *p1[10];   sizeof(p1)==sizeof(p)==sizeof(p2)//因为不管什么类型的指针,其大小都是4个字节。两个数组都是10个指针,即:40个字节。

    5.二级指针

    int *p = 10;//p是一个野指针,因为p没有指向任何内存地址。

    int a = 10;

    int *p1 = &a;

    int **pp1 = &p;

    int ***ppp1 = &pp1;

    a = ppp1;//ppp1存储的是pp1的地址。

    ***ppp1==10;

     6.指针数组和数组指针

    int *arr[10];//指针数组,表示数组中保存着10个指针。

    int(*a)[10];//数组指针,表示指向含有10个int类型元素的指针。

     

    数组指针:一个指针指向数组;当解引用指针得到指针指向的这个数组,数组和指针之间可以相互的转换;

    7.交换两个数据变量的值

    void Change(int *a ,int *b)

    {

    int temp = *a ;

    *a = *b;

    *b = temp;

    }

    void main()

    {

    int a = 10;

    int b = 20;

    Change(&a ,&b);

    }

    8.一维数组作为函数参数的使用方法

    void test(int buf[]){}; 等价于 void test(int *buf);buf都表示一个指针变量。

     9.将二维数组作为函数参数传递

    void test(int(*p)[10], int r ,int c)//形参必须为数组指针的形式,否则不能访问二维数组。
    //void test(int p[][10] ,int r ,int c)//等价形式
    {
     for (int i = 0; i <r; i++)
     {
      for (int j = 0; j < c; j++)
      {
       printf("%d", p[i][j]);
      }
     }
    }
    void main()
    {
     int arr[4][10] = { { 1, 2, 3, 5, 6, 7, 8, 9, 0 }, { 2, 3, 5, 5, 7, 8, 9, 7 }, { 2, 3, 5, 6, 78, 9, 0, 0, 9 }, { 1, 2, 3, 5, 6, 78, 98, 9 } };
     test(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0])/ sizeof(int));
    }
     
    10 const关键字保护数组内容
     

    ---恢复内容结束---

  • 相关阅读:
    DJANGO入门系列之(模型层:跨表操作)
    DJANGO入门系列之(模型层:单表操作)
    DJANGO入门系列之(模板层)
    DJANGO入门系列之(视图层)
    DJANGO入门系列之(模板层的简单介绍和视图层的扫尾)
    DJANGO入门系列之(虚拟环境的配置与安装)
    Django入门系列之(视图层基本概念)
    DJANGO入门系列之(路由控制)
    DJANGO入门系列之(Django请求生命周期and路由层)
    orm
  • 原文地址:https://www.cnblogs.com/jefy/p/9380139.html
Copyright © 2020-2023  润新知