2017-06-04 114 views

回答

6

表达式中使用的数组很少有例外,它被转换为指向其第一个元素的指针。

如果有这样

int my_array[5][5]; 

阵列那么它是数组的数组是所述阵列的所述元件具有类型int[5]。例如,表达式my_array[0]具有类型int[5]。因此表达式中使用的数组被转换为指向其第一个元素(到其第一个“行”)的类型int (*)[5]的指针。

类型int *int (*)[5]是不同的类型,并且不存在从一种类型到另一种类型的隐式转换。

表达式&my_array[0][0]的类型为int *

所以,如果你想在阵列重新解释为一维数组,你需要使用隐式转换

ptr = (int *)my_array; 

调查这个示范项目

#include <stdio.h> 

int main(void) 
{ 
    int my_array[5][5] = 
    { 
     { 1, 2 }, 
     { 3, 4, 5 }, 
     { 6 }, 
     { 7 } 
    }; 

    for (int(*p)[5] = my_array; p != my_array + 5; ++p) 
    { 
     for (int *q = *p; q != *p + 5; ++q) 
     { 
      printf("%d ", *q); 
     } 
     putchar('\n'); 
    } 
} 

它的输出是

1 2 0 0 0 
3 4 5 0 0 
6 0 0 0 0 
7 0 0 0 0 
0 0 0 0 0 
相关问题