對C語言程序來說,在同一文件中時,void func(char *a); 和 void func(char a[]); 完全等價
但在函數原型之外,如果一個數組在一個文件中聲明為指針,在另一個不同的文件中聲明為數組,那么它們是不等價的
示例代碼如下:
//main.c#include<stdlib.h>enum {ARRAYSIZE = 100};char *a;void insert_a(void);int main(void) { a = (char*)malloc(ARRAYSIZE); if(a == NULL) { //處理分配錯誤 } insert_a(); return 0;}//insert_a.cchar a[];void insert_a(void) { a[0] = 'a';}
解決方案如下:
//insert_a.henum {ARRAYSIZE = 100};extern char *a;void insert_a(void);//insert_a.c#include "insert_a.h"char *a;void insert_a(void) { a[0] = 'a';}//main.c#include<stdlib.h>#include"insert_a.h"int main(void){ a = (char*)malloc(ARRAYSIZE); if(a == NULL) { //處理分配錯誤 } insert_a(); return 0;}
新聞熱點
疑難解答
圖片精選