8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 C 中通过指针传递二维数组?

Thom Giovans 1月前

126 0

我正在学习 C 语言,在将二维数组的指针传递给另一个函数然后打印二维数组时遇到了麻烦。如能得到任何帮助我将不胜感激。int main( void ){ char array[50][50];...

我正在学习 C,在将二维数组的指针传递给另一个函数然后打印二维数组时遇到了麻烦。如能得到任何帮助我将不胜感激。

int main( void ){
    char array[50][50];
    int SIZE;

    ...call function to fill array... this part works.

    printarray( array, SIZE );
}

void printarray( char **array, int SIZE ){
    int i;
    int j;

    for( j = 0; j < SIZE; j++ ){
        for( i = 0; i < SIZE; i ++){
            printf( "%c ", array[j][i] );
        }
        printf( "\n" );
    }
}
帖子版权声明 1、本帖标题:如何在 C 中通过指针传递二维数组?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Thom Giovans在本站《c》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在 中 main() ,变量 \'array\' 声明为

    char array[50][50];
    

    这是一段 2500 字节的数据。当 main() 传递 的 \'array\' 时,它是指向该数据开头的指针。它是指向预期按 50 行排列的字符的指针。

    但在功能上 printarray() ,你声明

     char **array
    

    \'array\' 此处是指向 char *pointer .

    @Lucus 的建议是 void printarray( char array[][50], int SIZE ) 可行的,只不过它不是通用的,因为你的 SIZE 参数 必须 是 50。

    思路:defeat(yeech)中的参数数组类型 printarray()

    void printarray(void *array, int SIZE ){
        int i;
        int j;
        char *charArray = (char *) array;
    
        for( j = 0; j < SIZE; j++ ){
            for( i = 0; i < SIZE; i ++){
                printf( "%c ", charArray[j*SIZE + i] );
            }
            printf( "\n" );
        }
    }
    

    更优雅的解决方案是将“数组”制作成 main() 指针数组。

    // Your original printarray()
    void printarray(char **array, int SIZE ){
        int i;
        int j;
        for( j = 0; j < SIZE; j++ ){
            for( i = 0; i < SIZE; i ++){
                printf( "%c ", array[j][i] );
            }
            printf( "\n" );
        }
    }
    
    // main()
    char **array;
    int SIZE;
    // Initialization of SIZE is not shown, but let's assume SIZE = 50;
    // Allocate table
    array = (char **) malloc(SIZE * sizeof(char*));
      // Note: cleaner alternative syntax
      // array = malloc(sizeof *array * SIZE);
    // Allocate rows
    for (int row = 0; row<SIZE; row++) {
      // Note: sizeof(char) is 1. (@Carl Norum)
      // Shown here to help show difference between this malloc() and the above one.
      array[row] = (char *) malloc(SIZE * sizeof(char));
        // Note: cleaner alternative syntax
        // array[row] = malloc(sizeof(**array) * SIZE);
      }
    // Initialize each element.
    for (int row = 0; row<SIZE; row++) {
      for (int col = 0; col<SIZE; col++) {
        array[row][col] = 'a';  // or whatever value you want
      }
    }
    // Print it
    printarray(array, SIZE);
    ...
    
返回
作者最近主题: