糾正 c專家程式設計》231頁錯誤 函式返回陣列

2022-02-15 15:50:20 字數 740 閱讀 6280

在文章首先要求宣告乙個函式,這個函式描述成 返回乙個指向包含20個int元素的一維陣列的指標。

int (*fun())[20];
這個宣告沒有錯,編譯可以通過。

但是在函式實現的時候,書上如下

1

int (*fun())[20]2

3

編譯時報錯!

因為calloc返回乙個int*的型別,而我們的pear是乙個指向一整個陣列的型別即(int (*)[20])型,所以需要進行強轉!

具體實現如下

編譯成功且正常執行!

另:很多人會對這個函式宣告形式感覺奇怪,如果該函式需要引數,那如何寫?在上圖我已經給出了具體形式。不過這種形式很少見,最好不要這樣寫,這是

引發的乙個噱頭!

對於第57頁的

char (*j)[20

];j=(char (*)[20])malloc(20);

j 是 乙個指向具有20個char型別的陣列的指標,看過這個的人,很快就能找出 上述出錯的解決方法!

C專家程式設計

說到c語言,首稱 c程式語言 這是一本入門和進修均可的書籍,值得讀三遍以上,方才有味。進修書籍如 c專家程式設計 是一本c語言較高層次的書,是成為c語言專家的必經之路。我自以為達到了一定的 程度,才開始學習這本書的。人言,c語言是一門藝術,需要多年歷練才能達到較為完善的境界,此言不虛。c語言進修書籍...

C 專家程式設計

2011.9.4 c 專家程式設計 1 容易混淆的 const 關鍵字const 並不能把乙個變數變為常量,它修飾的符號僅表示該符號的值不能被賦值,也就意味著唯讀不可寫,但它並不能防止通過程式內部 甚至外部,其它函式 的方法來修改它。const 最有用支出是用來限定函式的形參,這樣該函式不會修改實參...

c專家程式設計

pag13 關於替代庫函式 標準規定編譯器只有在違反語法規則和約束條件的情況下才能產生錯誤資訊。所有c語言標準標頭檔案中宣告的識別符號均保留,所以不能宣告乙個叫做malloc 的函式,因為在標準標頭檔案裡已經有乙個函式以此為名。但由於這個規定不是約束條件,因此可以違反他。所以可以用自己宣告的函式來替...