简单分析C语言中指针数组与数组指针的区别

2020-01-06 14:03:38丽君
  • int main()   {  
  • int i;   int* pI = &i; //普通类型  
  •   typedef int(AINT5)[5];  
  • AINT5* p1;   int array[5];  
  • p1 = &array; //数组指针1    
  • int (*p2)[5] = &array; //数组指针2(不建议这样写)    
  • int (*p3)[4] = &array; // X 数组指针3(不建议这样写)    
  • return 0;   }  

    这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。

    指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

    数组指针:a pointer to an array,即指向数组的指针

    还要注意的是他们用法的区别,下面举例说明。

    int* a[4] 指针数组

    表示:数组a中的元素都为int型指针

    元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*

    int (*a)[4] 数组指针

    表示:指向数组a的指针

    元素表示:(*a)[i]

    注意:在实际应用中,对于指针数组,我们经常这样使用:

     

     
    1. typedef int* pInt;  pInt a[4];