这和2维数组的定义是一个道理
2维数组声明时要求给定第二维下标,同样,多为数组声明时要求给出除第一维外所有下标;
这是因为不管几位数组在内存中的存储和一维数组没有本质区别,都是线性存储的,长度是各个维之积。
运行时访问二维数组某元素时要靠各维下标做偏移指标,比如a[10][3],只有你给定第二位下标“3”,当你写a[10]时程序才知道要从a这个位置向后移动10个“3”。
参数的道理相同,也是局部变量的一种,和你在函数中声明的变量没有太大区别(栈中的位置不同)。所以必须这样写:
void trans(int a[][3], int b[]);
#include <stdio.h> #include <stdlib.h>
void trans(int a[][3], int b[]);
int main(void) { int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int b[9]; int i;
trans(a, b); for(i = 0; i < 9; i++){ printf("%d\t", b[i]); } printf("\n");
exit(0); }
void trans(int a[][3], int b[]) { int i, j, k;
for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ b[k++] = a[i][j]; } } }
|
阅读(2955) | 评论(0) | 转发(0) |