美文网首页
11. 数组、地址和指针 Array, Address, Poi

11. 数组、地址和指针 Array, Address, Poi

作者: 53df91bc24df | 来源:发表于2016-08-31 14:59 被阅读69次

    C优点:允许programmer访问程序使用的地址。
    程序利用这些地址,用于跟踪保存数据&指令的地方。

    11.1 数组名作为指针

    指针用于存储地址(c7.3),且与数组名紧密联系在一起。
    pointer唯一特征是偏移量offset能包含在使用指针的表达式中。比如*(gPtr+1)中的1是一个偏移量,也就是访问的grade[1]。

    地址运算符:&
    grade数组第4个的地址是&grade[3]
    &grade[3] = &grade[0](基址)+(3*4) //假设每个元素占4个字节

    ⭐️⭐️⭐️
    gPtr = &grade[0];//把地址,存储在指针中
    *gPtr = grade[0];//间接运算符(*)指针,就叫“被指针指向的变量
    
    //这块儿有点绕
    

    |||
    :-|:-|:-
    0|grade[0]|gPtr
    ...|...|...
    4|grade[4]|
    (gPtr+4)

    11.2 指针操作

    *指针,相当于是一个变量

    指针运算
    ||
    :-|:-
    *ptNum++|使用指针,给pointer增1
    *++ptNum|使用指针前,给pointer增1
    *ptNum--|使用pointer,给pointer减1
    *--ptNum|使用pointer前,给pointer减1

    #include <stdio.h>
    #define NUMELS 5
    int main()
    {
      int nums[NUMELS] = {16, 54, 7, 43, -5};
      int i, total = 0, *nPtr;
    
      nPtr = nums; /* store address of nums[0] in nPtr */
      for (i = 0; i < NUMELS; i++)
        total = total + *nPtr++;//指针运算⭐️⭐️
      printf("The total of the array elements is %d\n", total);
    
      return 0;
    }
    

    指针初始化

    int *ptNum = &miles;
    double *zing = &prices[0];
    

    11.3 传递和使用数组地址

    当传递数组给函数时,传递的唯一项目实际上是地址。
    即,存储这个数组的第一个位置的地址被传递。
    即,数组的地址,就是元素0的地址

    #include <stdio.h>
    #define NUMELS 5
    int findMax(int[], int); /* function prototype */
    
    int main()
    {
      int nums[NUMELS] = {2, 18, 1, 27, 16};
    
      printf("The maximum value is %d\n", findMax(nums,NUMELS));
    
      return 0;
    }
    
    int findMax(int vals[], int numEls) /* find the maximum value of the array */
    {
      int i, max = vals[0];
      for (i = 1; i < numEls; i++)
        if (max < vals[i])
          max = vals[i];
    
      return (max);
    }
    

    二维数组
    mums[0][0],*(*nums),*nums[0]
    mums[0][1],*(*nums+1),*nums([0]+1)
    mums[1][0],*(*(nums+1)),*nums[1]
    类推

    11.4 使用指针处理字符串(略)

    比如复制字符串到字符串

    11.5 使用指针创建字符串

    season[0] = "winter";
    season[1] = "spring";
    season[2] = "summer";
    season[3] = "fall"
    
    #include <stdio.h>
    int main()
    {
      int n;
      char *seasons[] = {"Winter",
                         "Spring",
                         "Summer",
                         "Fall"};
    
      for(n = 0; n < 4; ++n)
        printf("The season is %s\n.",seasons[n]);
    
      return 0;
    }
    

    相关文章

      网友评论

          本文标题:11. 数组、地址和指针 Array, Address, Poi

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