1、传递数组,打印不出来
#include <stdio.h> void solve() { printf("%d",x[0]); } int main() { int i; for(i=0;i<n;i++) { scanf("%d",&x[i]); printf("%d ",x[i]); } solve(); return 0; }
[Error] error: `x' undeclared (first use in this function)
或者是这个错误for each function it appears in.)
------------------------------------------------
解决方案一:设置全局变量
#include <stdio.h> int x[100]; void solve() { printf("%d",x[0]); } int main() { int i,n; puts("输入数组长度"); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&x[i]); printf("%d ",x[i]); } solve(); return 0; }
解决方案二:用指针传递首地址
传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。void func(int array[10])void func(int array[])void func(int *array)所以以上三种函数声明完全等同。
#include <stdio.h> void solve(int *x) //前面的int也不能省。 { printf("%d",x[1]); } int main() { int i,n; puts("输入数组长度"); scanf("%d",&n); int x[n]; for(i=0;i<n;i++) { printf("输入第%d个数",i+1); scanf("%d",&x[i]); printf("%d ",x[i]); } solve(); //这里的x也不能省 return 0; }
数组给一个函数,常用的是可把数组的首地址传给函数。
即相当于是指针的应用
fun(int array[10][])
fun(int array[])
fun(int *array)
三种调用方法
完整版:输入的数组全部打印出来
#include <stdio.h> int i,n; void solve(int *x) //前面的int也不能省。 { for(i=0;i<n;i++) { printf("%d",x[i]); } } int main() { puts("输入数组长度"); scanf("%d",&n); int x[n]; for(i=0;i<n;i++) { printf("输入第%d个数",i+1); scanf("%d",&x[i]); printf("%d ",x[i]); } solve(x); //这里的x也不能省 return 0; }
另外一个例子:
#include "stdio.h" //指针:数组的传递 void int_set(int *vc,int no,int val) { int i; for(i=0;i<no;i++) { vc[i]=val; } } int main() { int i; int ary[]={1,2,3,4,5}; int_set(ary,5,1); for(i=0;i<5;i++) printf("ary[%d]=%d ",i,ary[i]); return 0; }