C語言陣列與指標作為傳遞引數的使用
學習筆記中的內容多少會有一點文不對題,因為C語言中陣列無法作為函式的一個傳遞引數。而陣列名在作為函式傳遞引數使用的時候實際上也被轉換成了一個指標。
編寫如下程式碼;
#include"stdio.h"
char hello[] ="hello";
int main(void)
{
printf("%s\n",hello);
printf("%s\n",&hello[0]);
return 0;
}
編譯執行結果:
E:\WorkSpace\02_技術實踐\01_程式語言\01_C語言\01_C語言陷阱與缺陷\exp03>gcc hello.c
E:\WorkSpace\02_技術實踐\01_程式語言\01_C語言\01_C語言陷阱與缺陷\exp03>a
hello
hello
從上面的結果可以看出,其實,在函式的引數中使用陣列名與使用指向陣列第一個元素的指標是同一個效果。
儘管兩者在使用技術上有著同質性,但是為了避免不同的形式會給別人產生錯誤的引導,非陣列類的宣告儘量以指標的方式進行比較好。倘若一個指標指向的記憶體並不是一個數組,那麼採用陣列名的宣告方式或許就會給人產生錯誤的引導。類似的,如果指向的是一個數組區域,則會給人以更加豐富的資訊。例如:
int main(int argc,char* argv[])
{
/* code here */
}
與
int main(int argc,char** argv)
{
/* code here */
}
兩種方式完全等價,但是前面一種能夠更清晰地讓人看出:這個引數是指向某個元素起始地址的指標,而後面的這種方式則不能夠直觀地看出這種含義。
以上,是陣列或者指標用於函式引數傳遞時候需要注意的一點地方。主要的參考資訊來自於對書籍《C語言陷阱與缺陷》,的確是值得好好閱讀一下。