#include
#define cls 2
#define row 2
//這三種形式等價
//int sum_2(int (*)[cls],int);
//int sum_2(int [cls],int);
intsum_2
(int a[
][cls]
,int n)
;//這三種形式等價
//int sum_3(int [cls][row],int);
//int sum_3(int (*)[cls][row],int);
intsum_3
(int a[
][cls]
[row]
,int n)
;int
main()
,,,}
;for
(int i=
0;i<
4;i++
)printf
("\n");
}for
(int i=
0;i<
4;i++
)printf
("\n");
}printf
("sum=%d\n"
,sum_2
(a,4))
;int
(*p)
[cls]
=a;//陣列指標 :p指向乙個含兩個int型別的陣列
/*p就是a[0]的首位址
*p+1(因為p的型別是兩個int型別的陣列)即+1等於跳過兩個int型別,即乙個a[0]大小的位址,此時p=a[1]的首位址。
*所以每次+1表示跳過兩個int型別的大小。
*/for
(int i=
0;i<
4;i++
)printf
("\n");
}for
(int i=
0;i<
4;i++
)printf
("\n");
}printf
("sum=%d\n"
,sum_2
(p,4))
;/*三維陣列
* 陣列b是含2個元素的陣列(二維陣列b[0],二維陣列b[1])。而每個元素,以b[0]為例,是乙個含2個元素(一維陣列b[0][0],一維陣列b[1][1])的陣列。而b[0][0][0]又是含兩個int型別元素的陣列
* b是陣列b的首位址,b+1表示的就是b中第二個元素(即二維陣列b[1])的位址
* 又因為b[1]是二維陣列的陣列名,二維陣列的陣列名是它的首位址,所以b[1]+1表示的是二維陣列b[1]第二個元素(即一維陣列b[1][1])的位址,即b[1][1]的位址
* 又因為b[1][1]是一維陣列的陣列名,一維陣列的陣列名是它的首位址,所以b[1][1]表示的是一維陣列b[1][1]的首位址,即b[1][1]=&a[1][1][0];
* 所以b[1][1]+1表示的就是一維陣列b[1][1]的第二個元素的位置,即b[1][1]+1=&b[1][1][1].
*/int b[2]
[cls]
[row]=,
},,}
};for(
int i=
0;i<
2;i++
)printf
("\n");
}printf
("}\n");
}printf
("sum=%d\n"
,sum_3
(b,2))
;int
(*p2)
[cls]
[row]
=b;for
(int i=
0;i<
2;i++
)printf
("\n");
}printf
("}\n");
}printf
("sum=%d\n"
,sum_3
(p2,2)
);}int
sum_2
(int a[
][cls]
,int n)
}return sum;
}int
sum_3
(int a[
][cls]
[row]
,int n)}}
return sum;
}
執行結果1|1|1 2|2|2
3|3|3 4|4|4
5|5|5 6|6|6
7|7|7 8|8|8
0x7ffcf8ca1660|0x7ffcf8ca1660|0x7ffcf8ca1660 0x7ffcf8ca1664|0x7ffcf8ca1664|0x7ffcf8ca1664
0x7ffcf8ca1668|0x7ffcf8ca1668|0x7ffcf8ca1668 0x7ffcf8ca166c|0x7ffcf8ca166c|0x7ffcf8ca166c
0x7ffcf8ca1670|0x7ffcf8ca1670|0x7ffcf8ca1670 0x7ffcf8ca1674|0x7ffcf8ca1674|0x7ffcf8ca1674
0x7ffcf8ca1678|0x7ffcf8ca1678|0x7ffcf8ca1678 0x7ffcf8ca167c|0x7ffcf8ca167c|0x7ffcf8ca167c
sum=36
1|1|1 2|2|2
3|3|3 4|4|4
5|5|5 6|6|6
7|7|7 8|8|8
0x7ffcf8ca1660|0x7ffcf8ca1660|0x7ffcf8ca1660 0x7ffcf8ca1664|0x7ffcf8ca1664|0x7ffcf8ca1664
0x7ffcf8ca1668|0x7ffcf8ca1668|0x7ffcf8ca1668 0x7ffcf8ca166c|0x7ffcf8ca166c|0x7ffcf8ca166c
0x7ffcf8ca1670|0x7ffcf8ca1670|0x7ffcf8ca1670 0x7ffcf8ca1674|0x7ffcf8ca1674|0x7ffcf8ca1674
0x7ffcf8ca1678|0x7ffcf8ca1678|0x7ffcf8ca1678 0x7ffcf8ca167c|0x7ffcf8ca167c|0x7ffcf8ca167c
sum=36
sum=36
sum=36
變長陣列#include
//下面兩種函式原型等價
//int sum_2(int,int,int arr[*][*]);
intsum_2
(int rows,
int line,
int arr[rows]
[line]);
//arr是乙個變長陣列
//int sum_2(int arr[rows][line],int rows,int line); //錯誤,必須arr之後,因為arr的宣告需要row和line
intmain()
; //宣告乙個變長陣列,必須是auto類別,且不能在宣告中初始化它們
int arr1[a]
[b];
for(
int i=
0;i)for
(int j=
0;j) arr1[i]
[j]=i+j;
printf
("sum=%d\n"
,sum_2
(a,b,arr1));
return0;
}//並未實際建立陣列,當呼叫函式的時候,ar成為乙個指向陣列(含line個int 型別的值)的指標
intsum_2
(int rows,
int line,
int arr[rows]
[line])}
return sum;
}
執行結果
sum=4
指標 多維陣列 陣列指標 指標陣列
之前對陣列的概念一直沒有理解透徹,只覺得陣列名就是個常量指標而已,用法和基本的指標差不多。所以當我嘗試用二級指標去訪問二維陣列時,就經常會出錯。下面就是剛開始寫的乙個錯誤的程式 include int main int parray null parray iarray printf array 0...
多維陣列(陣列型別,陣列指標,陣列指標型別)
陣列 int myarray100 myarray是陣列首元素位址,myarray 1 步長是四個位元組 sizeof int myarray是整個陣列的位址,myarray 1 步長是100 sizeof int 400個位元組 typedef int myarraytype 100 myarra...
陣列和指標 指標和多維陣列
指標的值是它所指向物件的位址。位址的表示方式依賴於計算機內部的硬體。許多計算機都是按照位元組編址的,意思時記憶體中的每乙個位元組都按順序編號,這裡,乙個較大的位址通常是該物件的第乙個位元組的位址。因此,使用指標會更加的有效率,能夠很好的處理陣列,陣列表示法其實是在變相的使用指標。include st...