1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
// 函数指针参数的多种写法(非变长数组,列不能变,行能变) #include <stdio.h> void somefunction(int (*pt)[4]); void somefunction(int pt[][4]); //如果pt是函数参量,也可以这么写 "[]"表示pt是一个指针 void somefunction(int pt[3][4]); //合法申明,但是3会被忽略 void somefunction(int [][4]); //可以省略名称 //以下三种函数声明方式相同,typedef声明较为繁琐,不建议使用 typedef int arr4[4]; typedef arr4 arr3x4[3]; int sum(arr3x4 ar, int rows); int sum(int ar[3][4], int rows); int sum(int ar[][4], int rows); int main(int argc, char const *argv[]) { return 0; } // 可变长数组,需要较新编译器 #include <stdio.h> //row和col必须写在arr[row][col]之前 //或者可以这么写int sum(int, int, arr[*][*]) int sum(int row, int col, int arr[row][col]); int main(int argc, char const *argv[]) { int total; int arr[2][2] = { {1,2}, {3,4} }; total = sum(2, 2, arr); printf("%d\n", total); getchar(); return 0; } int sum(int row, int col, int arr[row][col]) { int i,j; int total = 0; for (i = 0; i < row; ++i) { for (j = 0; j < col; ++j) { total += arr[i][j]; } } return total; } // 匿名数组,复合文字 #include <stdio.h> int main(int argc, char const *argv[]) { // 5是int类型文字,9.9是double类型文字 // 匿名数组 是一种复合文字 可以省略数组长度(int[])={1,2}; (int [2]) = {1,2}; // 匿名数组没有名称,可以使用指针保存其位置 int *pt1; pt1 = (int [2]) = {1,2}; // 也可以作为函数参数 int total; total = sum((int[]){1,2,3}, 3); return 0; } |