我在使用以下代码时遇到了一些问题。 它是一个函数将一个多维数组的内容复制到另一个。 代码如下:
#include<stdio.h>
void copyarray(int ros,int cos,double ard[][cos] ,double arf[][cos]);
int main(){
int rows,columns;
printf("Enter number of rows\n ");
scanf("%d",&rows);
printf("Enter number of columns\n");
scanf("%d",&columns);
double ar[rows][columns];
double ar1[rows][columns];
printf("Enter the elements ");
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
scanf("%lf",&ar[i][j]);
}
}
printf("The 2d array is :\n");
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
printf("%lf ",ar[i][j]);
}
printf("\n");
}
copyarray(rows,columns,ar,ar1);
return 0;
}
void copyarray(int r,int c,double ar[r][c],double arr1[r][c]){
for(int j=0;j<r;j++){
for(int i=0;i<size;i++){
arr1[j][i]=ar[j][i];
}
}
printf("The new array has the following elements:\n");
for(int j=0;j<r;j++){
for(int i=0;i<size;i++){
printf("%lf ",arr1[j][i]);
}
printf("\n");
}
}
我收到以下错误:
&#34;使用参数&#39; cos&#39;外部职能机构&#34;
有人可以帮我解决这个问题吗? 谢谢
答案 0 :(得分:2)
你有
void copyarray(int ros,int cos,double ard[][cos] ,double arf[][cos]);
哪个是
type function_name(type arg_name_1,
type arg_name_2,
type array_name_1[][arg_name_2],
type array_name_2[][arg_name_2]);
在C99之前,您不能在函数声明中使用参数(在本例中为arg_name_2
)。该错误指的是在array_name_2[][arg_name_2]
中使用它作为&#34;在函数体之外&#34;。
但是,如HostileFork所述,如果您使用符合C99标准(或更高版本)的编译器,则可以执行此操作。
答案 1 :(得分:0)
你有两倍ard[][cos], double arf[][cos]
您需要double *ard, double *arf
因为c语言永远不会通过值传递数组,只能通过链接传递
你可以按价值传递结构,但这是另一个故事
#include <stdio.h>
void fill(int *a)
{
int i, j;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
a[i * 10 + j] = i + j;
}
}
}
void print(int *a)
{
int i, j;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
printf("%2d ", a[i * 10 + j]);
}
printf("\n");
}
}
int main(int argc, char *argv[])
{
int arr[10][10];
fill(&arr[0][0]);
print(&arr[0][0]);
return 0;
}
可能不是很漂亮,但很明显实际上是什么使编译器