指標做函式引數 高效C語言

2021-07-05 13:44:52 字數 1968 閱讀 6826

1.指標做函式引數——高效

2.思維擴充套件,誰為main()函式初始化環境,準備的記憶體空間?

需求1:列印乙個一維陣列的各個元素

定義函式介面

1.void printarray_1(int a[10]);

2.void printarray_2(int a, int len);

3.void printarray_3(int *parray, int len);//效率最高,編譯器維護成本最低,乙個指標加上乙個int len。

#include 

void printarray_3(int

*parray, int num)

}void main()

; printarray_3(a,sizeof(a)/sizeof(*a));

system("pause");

}

需求2:列印乙個二維陣列的各個元素

定義函式介面

1.

void printarray_1(int a[10][10]);

2.void printarray_2(int a[10], int len);

3.void printarray_3(char*(*parray), int len);//效率最高,編譯器維護成本最低,乙個陣列指標加上乙個int len。

4.void printarray_4(int *parray, int len);//效率最高,編譯器維護成本最低,乙個指標加上乙個int len。

編譯器忽略陣列長度,只需要知道陣列記憶體空間首位址即可完成陣列的列印。

分析以下程式,列印選單內容,執行時出錯?why?

#include 

#include

void printmenucontent(char* p)

}void main()

; printmenucontent(menu_content);

system("pause");

}

分析以下程式,列印作業系統環境變數資訊,一切正常,why?

#include 

#include

void main(int argc, char* argv, char* env)

for(i=0; argv[i]!=null; i++)

printf("******************* end argv *******************\n");

printf("******************* begin print env *******************\n");

for (i = 0; env[i] != null; i++)

printf("******************* end print env*******************\n");

system("pause");

}

分析:指標陣列env內容是作業系統提供的,menu_content是使用者提供的。

雖然都沒有給編譯器提供陣列內容長度資訊(後者的長度資訊會被編譯器忽略)。

但列印作業系統環境變數資訊時,程式執行正常,說明指標陣列內容最後乙個元素是null(『\0』,0均可),以終止迴圈列印。

修改如下:

char* menu_content = ;

**總結:由於c編譯器追求高效,忽略陣列長度資訊,一般都需要提供乙個額外的長度資訊,如:argv,argc。 還有一種辦法就是對指標陣列本身做手腳,通過新增』\0』,null,0標識陣列長度資訊,隱含傳遞給呼叫者。

————————————————————————**

C語言 指標做函式引數

任務 include 改變上乙個章節,用氣泡排序法和指標來排序 void bubblesort int int 函式的宣告使用指標 int main 定義乙個無序陣列 bubblesort a,10 氣泡排序a陣列 int i for i 0 i 10 i printf n return 0 voi...

C語言指標做函式引數

指標型函式的作用是將主調函式中的變數位址傳遞到被調函式中,從而實現變數的跨函式引用。例 在主函式中輸入兩個整數並存入變數中,然後再被調函式中將這兩個數互換,最後在主函式中輸出結果。示例一 引數傳遞 include void swap int a,int b int main void 這種方法不能實...

C語言 指標變數做函式引數

整型變數 實型變數 字元型變數 陣列名和陣列元素等均可作為函式引數。此外,指標型變數也可以作為函式引數。include void swap int a,int b main 將上述程式改寫為 include void swap int a,int b main 對比發現改後的程式無法實現值得交換,這...