如何在另一个函数中访问这个二维数组?

时间:2014-11-06 03:09:09

标签: c arrays function

我有这两个功能:

void insert(void) //inserts values in the bidimensional array
{
    int array[d][d]; // d is the value given by the user elsewhere
    int a = 0;
    for (int i = 0; i < d; i++){
        for (int j = 0; j < d; j++){
            array[i][j] = (d*d) - a;
            a++;
        }
    }
}

void show(void) //prints the values
{
    for (int i = 0; i < d; i++){
        for (int j = 0; j < d; j++){
            printf("%d", array[i][j]);
        }
        printf("\n");
    }
}

我的问题是show()函数只打印零(0),但这些不是正确的值。

我知道值插入正确,因为当我把printf(&#34;%d&#34;,array [i] [j]);在insert()函数的循环内,它正常打印。所以我的猜测是show()函数不访问数组的值,因为它是在另一个函数中声明的。

所以我试图让这个数组全局写在函数之外,但是它给了我错误:&#34;在文件范围&#34;中不允许变长数组声明,所以我试着将它放在main()中,在上述两个函数的调用之前,但我得到了另一个错误:&#34;未使用的变量&#39; array&#39;&#34;。

那么有人可以帮我弄清楚如何在show()函数中访问该数组吗?

P.S。我想要这两个函数:一个用于获取,另一个用于显示数字,我不需要单个函数。

3 个答案:

答案 0 :(得分:0)

这应该适合你:

您可以将数组作为指针传递!

#include <stdio.h>


void insert(int d, int array[][d]) {

    int a = 0, i , j;

    for (i = 0; i < d; i++) {
        for (j = 0; j < d; j++) {
            array[i][j] = (d*d) - a;
            a++;
        }
    }
}

void show(int d, int array[][d]) {

    int i, j;

    for (i = 0; i < d; i++ ){
        for (j = 0; j < d; j++)
            printf(" %3d ", array[i][j]);
        printf("\n");
    }
}


int main() {

    int d = 5; //user input
    int array[d][d]; //array

    insert(d, array);
    show(d, array);


    return 0;

}

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>

void *Array = NULL;
int D;

void insert(void){
    int (*array)[D] = Array;
    int a = 0;
    for (int i = 0; i < D; i++){
        for (int j = 0; j < D; j++){
            array[i][j] = (D*D) - a;
            a++;
        }
    }
}

void show(void){
    int (*array)[D] = Array;
    for (int i = 0; i < D; i++){
        for (int j = 0; j < D; j++){
            printf("%3d ", array[i][j]);
        }
        printf("\n");
    }
}

int main(void){
    D = 5;
    Array = malloc(sizeof(int [D][D]));
    insert();
    show();
    free(Array);

    return 0;
}

int main(void){
    D = 5;
    int array[D][D];
    Array = array;
    insert();
    show();

    return 0;
}

答案 2 :(得分:-3)

尝试使用指针,将数组作为参考传递。鉴于你知道d

的价值是什么
void show(int* arRef, int d) //prints the values, here pass d as length of array. 
    {
        for (int i = 0; i < d; i++){
            for (int j = 0; j < d; j++){
                printf("%d", &arRef[i][j]);
            }
            printf("\n");
        }
    }