我有这两个功能:
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。我想要这两个函数:一个用于获取,另一个用于显示数字,我不需要单个函数。
答案 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");
}
}