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\n", 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\n", *(*p2 + i);
}
return 0;
}