2014-07-19 22 views

回答

1

在C中,您通过指针传递数组,通常是包含其长度的第二个参数。

例如:void printArray(char * arrayStart, int length)(对于字符数组) 我假设你知道如何编写一个简单的for循环遍历数组的所有元素并打印它们。对于2D阵列,您可以改为使用char ** arrayStart

(当调用函数传递以下列方式排列:

char myArray[] = "some Text" 
printArray(myArray, 9); 

+0

感谢您的答复。我有一个问题。我们可以通过完整的数组,如下所示。假设我们想传递整数数组。它可以写成如下所示void printarray(int param [10]) – kadu

+0

@kadu不幸的是,作为C不知道它自己的大小,并且你所建议的方式是行不通的,因为内部的'param [10]'实际上变成了'param + 10'(param是指向第一个元素的指针数组),所以为了避免混淆,这种传递数组的方式是不允许的。虽然这有点不方便,但是一旦你习惯了,它并没有那么糟糕(并且指针对很多事情都非常有用) – UnholySheep

0

示例代码在这里:

#include<stdio.h> 

    void print_1D(int *arr,int m) 
    { 
     int i; 
     for(i=0;i<m;i++) 
      printf("%d ",arr[i]); 
     putchar('\n'); 
    } 

    void print_2D(int *arr[num],int m,int n) //<---observe here 
    { 
     int i,j; 
     for(i=0;i<m;i++) 
     { 
      for(j=0;j<n;j++) 
       printf("%d ",arr[i][j]); 
      putchar('\n'); 
     } 
    } 

    int main() 
    { 
     int oneD[anySize1] = {2,5,67,23,32,....}; 
     int twoD[anySize2][num] = { {23,17,..},{....},{....},....}; //<---and here 
     int m = anySize1,n = anySize2; 
     print_1D(oneD,m); 
     print_2D(twoD,m,n); 
     return 0; 
    } 

如果2D的数组声明如下

int arr2D[10][20]; 

那么函数的声明必须是,

void print_2D(int *arr[20],int m,int n) 

void print_2D(int arr[][20],int m,int n) 
+0

行'int m = n1,n = n2'应该是'int m = anySize1 ,n = anySize2'以避免混淆。 (我也喜欢使用'int ** arr'而不是'int * [num]',因为我觉得它不那么容易混淆) – UnholySheep

相关问题