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\n",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\n",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\n",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\n",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\n",i,ary[i]); return 0; }