如何使用指针在另一个函数内部分配一个数组

我是第二年的计算机工程师,还在学习C语言的过程。 我想通过使用函数而不是在main内部分配动态地分配数组。

这是我在main中分配数组时的代码。

#include  #include  #include  #include  #define ESC_KEY 27 #define NUM_1_KEY 49 #define NUM_2_KEY 50 void find_two_largest(int a[], int n, int *largest, int *second_largest); void arrayInit(int *,int *, int, int); void randGenArray(int [], int); void inputArray(int[], int); void result(int, int); void loading(void); int menu(void); int main(void) { system("color f5"); int n,i,largest,largest_2, *a; arrayInit(a,&n, 2, 10); if(menu()) randGenArray(a,n); else inputArray(a,n); find_two_largest(a,n,&largest,&largest_2); result(largest,largest_2); return 0; } void find_two_largest(int a[], int n, int *largest, int *second_largest) { int i=0,j=0; system("cls"); loading(); *largest = 0; *second_largest = *largest; for (i=1;i<n;i++){ if(*largest<a[i]) *largest=a[i]; } for(j=1;j<n;j++){ if(*largest==a[j]) continue; else{ if(*second_largest<a[j]) *second_largest=a[j]; } } return; } void randGenArray(int a[], int n) { srand(time(NULL)); int i; for(i=0; i> Integer %d: %d", i+1, a[i]); } printf("\n\n\nPress any key to continue..."); getch(); return; } void inputArray(int a[], int n) { int i; for(i=0; i<n; i++){ printf("\n Please enter integer %d: ", i+1); scanf("%d",&a[i]); } return; } int menu(void) { char _char; printf("\n Please choose one of the following options:\n 1.Fill array manually\n 2.Fill array by random numbers\n\n "); while(1) { _char = getch(); switch(_char) { case ESC_KEY: printf("\n\n Thank you for using our software!\n\n"); exit(0); case NUM_1_KEY: system("cls"); return 0; case NUM_2_KEY: system("cls"); return 1; default: break; } } } void arrayInit(int *a,int *n, int min, int max) { printf("\n Please enter a length of the array: "); do{ scanf("%d", n); if (*nmax) printf("\nThe ranged is limited. Please enter the value between %d and %d.\n", min, max); } while(*nmax); a = (int*)calloc(*n,sizeof(int)); return; } void loading(void) { printf("\n Loading"); printf("."); Sleep(300); printf("."); Sleep(300); printf("."); Sleep(300); system("cls"); return; } void result(int l, int l2) { system("cls"); printf("\n Largest = %d Second Largest = %d",l,l2); Sleep(500); printf("\n\n\n Thank you using our software! ;D\n\n"); return; } 

但是如果你将这行从arrayInit剪切并粘贴到main并将* n更改为n – 它将起作用!

a =(int *)calloc(* n,sizeof(int));

对于那些愚蠢而明显的事情我感到很遗憾,但我自己并没有弄清楚。 谢谢你的任何建议。

这是一个简单的程序,它将告诉你如何做到这一点 –

  #include  #include  void create(int **p,int n); // function taking arguments as int ** and n is number of elements int main(void) { int *a; int n=5,i; // declare and initialize n create(&a,n); // pass address of a to function for(i=0;i 

工作守则

您必须更改函数返回类型

 void * arrayInit(int *n, int min, int max) { printf("\n Please enter a length of the array: "); do{ scanf("%d", n); if (*nmax) printf("\nThe ranged is limited. Please enter the value between %d and %d.\n", min, max); } while(*nmax); return calloc(*n,sizeof(int)); } 

并以这种方式从main调用它: a = arrayInit(&n, 2, 10);