| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
#include <stdio.h> 
 
int main() 
{ 
    char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};                     // 定义一个指针数组 
    char *(*p)[5] = &array;                        // (*p)[5]是数组指针,为什么前面还要再加一个*? 
    int i, j; 
          
    for (i = 0; i < 5; i++) 
    { 
        for (j = 0; (*p)[i][j] != '\0'; j++)                   // 这里(*p)[i][j]如果是指内容的话不是应该要取值吗,不应该是用 *p[i][j] 来表示取值吗? 
        { 
            printf("%c", (*p)[i][j]);               //既然是指针,打印的话不应该是*(*p)[i][j]吗? 
        } 
        printf("\n"); 
    } 
     
    return 0; 
} 
(*p)[5] 数组指针,是一个指针,它指向了一个数组 它本来正常指向的是array[5] 
(*p)[0] = "FishC" 
(*p)[1] = "Five" 
因为它里面是字符串不是字符所以不能这样访问,所以还得通过指针来访问。 
 
但本题中*array[5]  指针数组 也是数组,但是它里面存放的都是指针变量,"FishC", "Five", "Star", "Good", "WoW" 这些都是把字符串的地址存放到 *array[5] 中。 
数组里面都是指针,那怎么访问里面的内容呢? 
平常 
int a = 5; 
int *p = &a; // &a 就是地址,如果用指针的方式来获取a处的内容 就得用 *p 来操作了 
 
*(*p)[5] 就是用指针的形式指向数组中"FishC", "Five", "Star", "Good", "WoW" 的地址。就好比 
*(*p)[0] = "FishC"的地址  
*(*p)[1] = "Five"的地址  
 
好了*(*p)[5]再来看它的优先级 
() 最高 (*p) 
[] 其次 [5] 
* 最后 
所以这里先是一个数组指针(*p)[5]然后再是 *一个指针来指向数组里的每一项。 
 
 
 |   
 
 
 
 |