user-0 提问: 二维数组作参数问题

回复:
user: user-1
content: 引用 8 楼 gzvincentlee 的回复:[quote=引用 6 楼 r_Jimy 的回复:] [quote=引用 5 楼 gzvincentlee 的回复:] [quote=引用 3 楼 r_Jimy 的回复:]  bool find(int array[MAXLEN][MAXLEN],int number,int x,int y,int nlen) {     if(x > nlen-1 || y < 0)         return false;      if(array[x][y] == number)     {         printf("the number %d is found!\n",number);         printf("x = %d ; y = %d\n",x,y);	         return true;	     }     else if(array[x][y] > number)     {         //return find(array[MAXLEN][MAXLEN],number,x,y-1,nlen);你直接传入array[10][10]越界了，下同         return find(array,number,x,y-1,nlen);     }     else if(array[x][y] < number)     {         //return find(array[MAXLEN][MAXLEN],number,x+1,y,nlen);         return find(array,number,x+1,y,nlen;     } }  谢谢你。你说的是对的。但是我想知道为什么find函数定义的时候形参又可以是array[10][10]呢？[/quote] 形参只用于指示参数类型，定义成int array[][]也可以，具体指定是10可以方便知道数组只有10个元素，这里的参数是数组 名，即指向二维数组首地址的指针，通过这个指针可以访问整个数组 而函数调用传入的参数也应是一个地址，你这时传入一个array[3][5]，它的实际上是数组里的元素，假设数组初始化array[3][5]=0;那么函数里面会把这个0作为地址参数来访问，即使刚好这里的值可以被程序访问，读到的值也不会是array数组的内容 假设函数声明为void  fun(int arr[]); 此时外面定义数组 int arr1[5]; int arr2[6] 这时都可以这样调用这个函数 fun(arr1); fun(arr2); 传入的数组地址不同，就能访问不同的数组了 [/quote] 谢谢，你说的大概意思我明白。但是定义成int array[][]编译是会出错的。要定义成int array[][10]，或者int array[10][10]。但是我想知道这个10有什么作用？我定义成int array[3][3]的时候我输入的时候输入二维数组的时候元素为4*4也可以运行。[/quote]   int array[3][3]会被编译器理解成int array[][3]，还是一个数组指针。上前面一样。 你还可以这样。int (&array)[10][10];这个就是真正的int array[10][10]了。数组的引用。

user: user-0
content: 引用 6 楼 r_Jimy 的回复:[quote=引用 5 楼 gzvincentlee 的回复:] [quote=引用 3 楼 r_Jimy 的回复:]  bool find(int array[MAXLEN][MAXLEN],int number,int x,int y,int nlen) {     if(x > nlen-1 || y < 0)         return false;      if(array[x][y] == number)     {         printf("the number %d is found!\n",number);         printf("x = %d ; y = %d\n",x,y);	         return true;	     }     else if(array[x][y] > number)     {         //return find(array[MAXLEN][MAXLEN],number,x,y-1,nlen);你直接传入array[10][10]越界了，下同         return find(array,number,x,y-1,nlen);     }     else if(array[x][y] < number)     {         //return find(array[MAXLEN][MAXLEN],number,x+1,y,nlen);         return find(array,number,x+1,y,nlen;     } }  谢谢你。你说的是对的。但是我想知道为什么find函数定义的时候形参又可以是array[10][10]呢？[/quote] 形参只用于指示参数类型，定义成int array[][]也可以，具体指定是10可以方便知道数组只有10个元素，这里的参数是数组 名，即指向二维数组首地址的指针，通过这个指针可以访问整个数组 而函数调用传入的参数也应是一个地址，你这时传入一个array[3][5]，它的实际上是数组里的元素，假设数组初始化array[3][5]=0;那么函数里面会把这个0作为地址参数来访问，即使刚好这里的值可以被程序访问，读到的值也不会是array数组的内容 假设函数声明为void  fun(int arr[]); 此时外面定义数组 int arr1[5]; int arr2[6] 这时都可以这样调用这个函数 fun(arr1); fun(arr2); 传入的数组地址不同，就能访问不同的数组了 [/quote] 谢谢，你说的大概意思我明白。但是定义成int array[][]编译是会出错的。要定义成int array[][10]，或者int array[10][10]。但是我想知道这个10有什么作用？我定义成int array[3][3]的时候我输入的时候输入二维数组的时候元素为4*4也可以运行。

user: user-2
content: 其实二维数组像 char array[2][3]; 就是连续的6个字节的内存，传一个指针，一个总长度就可以了。

user: user-3
content: 引用 5 楼 gzvincentlee 的回复:[quote=引用 3 楼 r_Jimy 的回复:]  bool find(int array[MAXLEN][MAXLEN],int number,int x,int y,int nlen) {     if(x > nlen-1 || y < 0)         return false;      if(array[x][y] == number)     {         printf("the number %d is found!\n",number);         printf("x = %d ; y = %d\n",x,y);	         return true;	     }     else if(array[x][y] > number)     {         //return find(array[MAXLEN][MAXLEN],number,x,y-1,nlen);你直接传入array[10][10]越界了，下同         return find(array,number,x,y-1,nlen);     }     else if(array[x][y] < number)     {         //return find(array[MAXLEN][MAXLEN],number,x+1,y,nlen);         return find(array,number,x+1,y,nlen;     } }  谢谢你。你说的是对的。但是我想知道为什么find函数定义的时候形参又可以是array[10][10]呢？[/quote] 形参只用于指示参数类型，定义成int array[][]也可以，具体指定是10可以方便知道数组只有10个元素，这里的参数是数组 名，即指向二维数组首地址的指针，通过这个指针可以访问整个数组 而函数调用传入的参数也应是一个地址，你这时传入一个array[3][5]，它的实际上是数组里的元素，假设数组初始化array[3][5]=0;那么函数里面会把这个0作为地址参数来访问，即使刚好这里的值可以被程序访问，读到的值也不会是array数组的内容 假设函数声明为void  fun(int arr[]); 此时外面定义数组 int arr1[5]; int arr2[6] 这时都可以这样调用这个函数 fun(arr1); fun(arr2); 传入的数组地址不同，就能访问不同的数组了

user: user-0
content: 引用 3 楼 r_Jimy 的回复: bool find(int array[MAXLEN][MAXLEN],int number,int x,int y,int nlen) {     if(x > nlen-1 || y < 0)         return false;      if(array[x][y] == number)     {         printf("the number %d is found!\n",number);         printf("x = %d ; y = %d\n",x,y);	         return true;	     }     else if(array[x][y] > number)     {         //return find(array[MAXLEN][MAXLEN],number,x,y-1,nlen);你直接传入array[10][10]越界了，下同         return find(array,number,x,y-1,nlen);     }     else if(array[x][y] < number)     {         //return find(array[MAXLEN][MAXLEN],number,x+1,y,nlen);         return find(array,number,x+1,y,nlen;     } }  谢谢你。你说的是对的。但是我想知道为什么find函数定义的时候形参又可以是array[10][10]呢？

user: user-4
content: 引用 1 楼 zhao4zhong1 的回复:思考一下为什么没人把整个互联网内容当函数参数传来传去呢？噗

user: user-3
content: bool find(int array[MAXLEN][MAXLEN],int number,int x,int y,int nlen) {     if(x > nlen-1 || y < 0)         return false;      if(array[x][y] == number)     {         printf("the number %d is found!\n",number);         printf("x = %d ; y = %d\n",x,y);	         return true;	     }     else if(array[x][y] > number)     {         //return find(array[MAXLEN][MAXLEN],number,x,y-1,nlen);你直接传入array[10][10]越界了，下同         return find(array,number,x,y-1,nlen);     }     else if(array[x][y] < number)     {         //return find(array[MAXLEN][MAXLEN],number,x+1,y,nlen);         return find(array,number,x+1,y,nlen;     } }

user: user-5
content: find函数写的有问题

user: user-6
content: 思考一下为什么没人把整个互联网内容当函数参数传来传去呢？