网站模板 phpcms,iis7创建网站,齐齐哈尔电话黄页,百度指数免费添加C给函数传数组参数
在C中#xff0c;如果要给一个函数传入一个数组#xff0c;一般都是传入两个参数一个数组指针和一个数组大小 例#xff1a; void print_1 (int n, int *datas ) { for (int i 0; i n; i) { std::cout datas[i] 给函数传数组参数
在C中如果要给一个函数传入一个数组一般都是传入两个参数一个数组指针和一个数组大小 例 void print_1 (int n, int *datas ) { for (int i 0; i n; i) { std::cout datas[i] ; } std::cout std::endl; } 对这个函数我们可以这样使用它: const int N 3; int datas[N] {1, 2, 3}; print_1 (N, datas); 不过对这个函数我们可能会传错 n 的大小而在运行时可能出错例如这样使用 const int N 3; int datas[N] {1, 2, 3}; print_1 (4 , datas); 有些时候我们希望某函数只接受指定大小的数组例如我们希望只接受大小为 3 的数组 void print_2 (int datas[3] ) { for (int i 0; i 3 ; i) { std::cout datas[i] ; } std::cout std::endl; } 但实际上上面的函数不能正确工作 const int N 3; int datas[N] {1, 2, 3}; print_2 (datas); int datas2[N - 1] {1, 2}; print_2 (datas2); 也就是我们传入了一个大小为 2 的数组编译器没报任何错误我们的函数接口 print_2 (int datas[3 ]) 中的 3 没起任何作用 事实上上面的函数接口应该这样写 void print_3 (int (datas) [3]) { for (int i 0; i 3; i) { std::cout datas[i] ; } std::cout std::endl; } 这时我们如果这样使用是正确的 const int N 3; int datas[N] {1, 2, 3}; print_3 (datas); 而我们如果这样使用编译器会报错 int datas2[N - 1] {1, 2}; print_3 (datas2); 在上面这个例子(print_3)的基础上我们可以使用模板进行泛型实现 templateint N void print_4 (int (datas)[N]) { for (int i 0; i N; i) { std::cout datas[i] ; } std::cout std::endl; } 这时候我们可以传递任意大小数组而不担心给函数传入了错误的参数 const int N 3; int datas[N] {1, 2, 3}; print_4 (datas); int datas2[N - 1] {1, 2}; print_4 (datas2); 假如我们给传了错误参数函数将会报错 const int N 3; int datas[N] {1, 2, 3}; print_44 (datas); C中二位数组作为函数参数 变量在作用域里面被声明的是什么类型就当作什么类型来用。 1参数是二维数组但是要指定第二维的维数。 int array[10][10]; 函数声明void fuc(int a[][10]); 函数调用fuc(array); ——在函数fuc中a是二维数组。使用a[i][j]形式来访问数组中元素。 2参数使用一维指针数组。 int *array[10]; for(i 0; i 10; i) array[i] new int[10]; 函数声明void fuc(int *a[10]); 函数调用fuc(array); ——在函数fuc中a是一维指针数组。使用*(a[i] j)形式来访问数组中元素。 3参数使用指针的指针。 int **array; array new int *[10]; for(i 0; i 10; i) array[i] new int[10]; 函数声明void fuc(int **a); 函数调用fuc(array); ——在函数fuc中, a是指针的指针。使用*(int *)(a i*d2 j)形式来访问数组中元素。其中 a[0]array[0][0], a[1]array[0][1], … a[10]array[1][0] 注d2为二维数组的二维维数即列数。并且a i*d2 j为地址所以要把这个类型为指针的指针的地址强制转换为指针来使用 转载自http://blog.csdn.net/hongjiqin/article/details/5739935
http://www.cnblogs.com/growup/archive/2011/03/01/1971529.html