指针数组和数组指针

1.指针数组

int *p1[5];

上面是一个指针数组,我们可以从运算符的优先级和综合性进行分析:
数组下标的优先级要比取值运算符的优先级高,所以先入为主,p1被定义为具有5个元素的数组,因为还有一个星号,所以它们应该是指向整型变量的指针。
如下图所示:

https://xxx.ilovefishc.com/forum/201606/21/011328bkm1bn666ok6vzuy.png

指针数组是一个数组,每个数组元素存放一个指针变量。

代码示例:

#include <stdio.h>
int main()
{
          char *p[5] = {
                        "时间,不在于你拥有多少,而在于你怎样运用 --  艾克"
                        "just do it  --  nike"
                        "一切皆有可能  --  李宁"
                        "永不止步  --  安踏"
                        "one more thing...  --  苹果"
};
       int i;


       for (i = 0 ; i < 5; i++)
       {
                  printf("%s
", p1[i]);
        }


          return 0;

}

2.数组指针

int (*p2)[5];

上面是一个数组指针,我们一样可以从运算符的优先级和综合性进行分析:
因为圆括号和数组下标位于同一个优先级,所以就要看先来后到的问题了。由于它们的结合性都是从左到右,所以p2先被定义为一个指针变量。后面还紧跟着一个具有5个元素的数组,p2指向的就是它。由于指针变量的类型事实上就是它所指元素的类型,所以这个int就是定义数组元素的类型为整型。

如下图所示:

https://xxx.ilovefishc.com/forum/201606/21/011721ynsrn335zyzij4zl.png

代码示例:

#include <stdio.h>

int mian()
{ 
          int temp[5] = {1, 2, 3, 4, 5};
          int (*p2)[5] = &temp;
          int i;
       

          for (i = 0; i < 5 ; i++)
          {
                     printf("%d
", *(*p2 + i);
          }
 

         return 0;
   
}
原文地址:https://www.cnblogs.com/xiao--liang/p/10403299.html