2017-06-04 171 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 
相關問題