關於c語言指標呼叫函式,關於C語言中指向函式的指標的呼叫問題

時間 2021-05-04 18:27:47

1樓:匿名使用者

第一條紅線是定義乙個函式指標;

第二條紅線起強轉作用,把0xd010f0強轉為對應的函式指標型別

我寫的這個程式可以幫你理解...常量位址被printab取代~

2樓:

劃紅線的是宣告了乙個函式指標,這個函式的兩個引數和返回值都是int,然後將0xd**的位址強制轉換為函式啊

同下面類似

typedef int (*func)(int, int);

func m;

m = (func)0xd....

3樓:

第一行,定義乙個函式指標p,該函式有兩個整型形參,且返回整型資料;第二行,讓函式指標p指向乙個位址,該位址應該就是前面說到的那種函式的位址,需要對這個位址做強制型別轉換為同型別的函式指標,才能正確賦值給p。

4樓:匿名使用者

第乙個紅線是:p是函式指標,p指向函式應該形如int fun(int,int)。

第二個紅線是:0xd010f0這應該是乙個形如紅線1型別函式的位址,p指向了該函式位址。(可以用p呼叫這個位址函式了)

關於c語言中指向函式的指標的呼叫問題

5樓:匿名使用者

兩種方式,在某些環境下是等效的,但是個人建議使用m=(*p)(a)這種方式,表意明確

說是等回效的原因是實際上函答數名也只是乙個位址而已

但是要注意的是,m=p(a)這樣的寫法【據說】某些編譯器認為是錯誤的表示式,會導致編譯錯誤(但是同時,如果lz看書比較仔細的話,可能會在經典書籍一書中見到說兩種表示都是合理的[中文版p261],所以我之前強調了是"據說",事實上,我到今天所用過的所有c編譯器都支援兩種表示方式;但是我們再回到經典中的經典中使用的函式指標都是m=(*p)(a)這種方式[5.11 指向函式的指標])

6樓:匿名使用者

函式名就是函式入口位址,所以這兩種寫法中:

前面的是函式寫法,後面的是指標寫法,其實是一樣的

有關於c語言中函式呼叫和指標

7樓:匿名使用者

函式引數用值傳遞時,函式的形參只不過是實參的拷貝而已。也就是說,1中呼叫swap函式時,記憶體中實際上a,b,x,y四個變數都存在,x是a的拷貝,y是b的拷貝,對x,y的值進行交換,a,b的值並未交換。

而2中用了指標傳遞,swap中的a,b,實際上是指向了main中的a,b。這個swap中交換的是a,b指向的變數的值,也就是交換了main中的a,b的值。

8樓:匿名使用者

1中只是呼叫了主函式中x,y的數值,子函式中的x,y與原來的x,y沒有任何關係,也就是說,並沒有對主函式中的x,y進行修改

2中呼叫了主函式中x,y的位址,而在子函式中完成了對該位址指向的儲存空間的操作,因此能完成交換

9樓:匿名使用者

因為第二個傳遞的值是指標 在自定義函式中交換的是指標對應的記憶體單元 所以當然會改變

而第乙個只是傳了普通的值 相當於複製 所以不會改變

不會可以hi我 細聊

c語言指標與函式呼叫

10樓:弘懌嚴寒梅

你的l1和l2的實現是相同的,所以只要其中乙個,而且你的l1方法不能那樣用。

#include

void

l1(int

*a1,int

*b1);

void

main()

void

l1(int

*a1,int

*b1)

c語言關於指標的求解,C語言中關於指標的指標問題?

出釹 int x 10 p1 a x 3 x 3 3 陣列從0開始,3其實是第四個 b p1 x 3,p1 先執行p1 x 3,也就是指向x 3 因為p1定義成指標。p1 這時候先執行再加,這表示式仍然是3 c p1 x 2,p1 p x 2 x陣列的地址加2,也就是指向x 2 x 2,這時候p 同...

關於c語言指標的問題,乙個關於c語言指標的問題

二維陣列相當於乙個一維陣列裡面的元素都是一維陣列 二維陣列名也相當於乙個二級指標。一維陣列 a a 0 二維陣列 a a 0 a 0 0 通俗點寫就是a a 0 a 0 a 0 0 因為 a 0 a 0 0 所以a於 a指向同乙個位址 a 0 0 則 a a 0 0 include int main...

C語言關於指標的一道題,C語言關於指標的一道選擇題

sum sum p 二維陣列的指標不是怎麼用的吧 直接加個一就相當於指向了第二行的首位址了 printf 5.2f p n 1 i c語言關於指標的一道選擇題 d 第一次列印 p 先取值後 也就是列印完p的位址才偏移的。k p,那麼 k就等價於 p,所以列印的是第二個陣列的值 c語言指標的一道題 岔...