zoukankan      html  css  js  c++  java
  • [C语言基础] 数组与指针之间的引用

    通过指针引用数组,通过数组引用指针,你搞明白了么?通过下面3种情形来了解一下数组和指针

     

    Case 1.

    unsigned char arry[10];
    unsigned char *ptr;
    unsigned char a, b, c;

    ptr = arry;
    a = ptr[0];
    b = ptr[1];
    c = ptr[2];

    Case 2.

    unsigned char arry[10];
    unsigned char *ptr;
    unsigned char a, b, c;
    
    ptr = arry;
    a = *ptr;
    b = *(ptr+1);
    c = *(ptr+2);

    Case 3.

    unsigned char *ptr = (unsigned char *)0x20000000;
    unsigned char a, b, c;
    
    a = ptr[0];
    b = ptr[1];
    c = ptr[2];

     

    以上3种情形编译都能通过,想要表达的是怎样用数组的方式(下标)表达一个指针内容,和怎样用指针变量的方式表达一个数组。

    对于Case 1,C语言规定,数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中首元素(即序号为0的元素)的地址,所以ptr指向数组Arry的首地址。那么带下标的指针变量是什么含义呢?其实在程序编译的时候,对下标的处理方法是转换为地址的,对ptr[i]处理成*(ptr+i)。

    Case 2 是指针的常规引用,Case 3和Case 1类似,都是带下标的指针变量的应用。

     

    通过以上的简单分析,可以得出一个结论,下标法直观,指针变量法效率高。

          [参考]:

    [1] 谭浩强著. C程序设计教程. 北京:清华大学出版社,2007

    /×××××××××××××××××××××××××××××××××××××××× THE END××××××××××××××××××××××××××××××××××××××××××××/

  • 相关阅读:
    [匈牙利算法] 洛谷 P1640 连续攻击
    [dfs] Jzoj P5916 flow
    [bfs] Jzoj P3522 迷宫花园
    [二分][状压dp] Jzoj P3521 道路覆盖
    [模拟] Jzoj P3520 原根
    [并查集] Jzoj P5914 盟主的忧虑
    [树上差分][子树求和][树形dp] Jzoj P5911 Travel
    [思维][暴力] Jzoj P5912 VanUSee
    [dfs][离散化] Jzoj P5910 DuLiu
    [cdq分治][树的重心] 洛谷 P3806 点分治1
  • 原文地址:https://www.cnblogs.com/mr-bike/p/3661990.html
Copyright © 2011-2022 走看看