c指標作為引數傳遞以及指標的指標

2022-03-16 10:19:00 字數 1475 閱讀 7397

函式引數傳遞的只能是數值,所以當指標作為函式引數傳遞時,傳遞的是指標的值,而不是位址。

#include

"stdio.h"

void

pointer

(int*p

)int

main

()

輸出結果:

the b address 28ff3c

the p is point to 0028ff3c , addr is 28ff38, *p is 22

enter function

the p is point to 0028ff3c , addr is 28ff20, *p is 22

the p is point to 0028ff3c , addr is 28ff20, *p is 11

the p is point to 0028ff0c , addr is 28ff20, *p is 11

function

return

the p is point to 0028ff3c , addr is 28ff38, *p is 11

%p為指標所指向的資料的位址,這裡既為變數b的位址。

在沒有進入pointer函式之前,變數p儲存的值為28ff3c,變數p的位址為28ff38,*p的值等於b的值等於22

進入pointer之後,p所指向的記憶體位址沒有改變,但是p自身的位址變了。意味著函式傳遞只是將28ff3c傳遞進來了。雖然這個指標變數名字還是叫做p,但與main函式中的指標變數已經不一樣了。這意味著,你可以改變main函式中b的值,但是不能改變p的值

先看乙個例子

#include

"stdio.h"

void

getmemory

(char*p

,int

num)

void

main

()

getmemory這個函式是呼叫malloc申請一塊記憶體。乍一看好像沒什麼問題,編譯也不會報錯。但是執行起來,程式直接奔潰。 其實有了上面的分析就可以知道,getmemeory中的p是不能改變str的指向的,也就是說str還是指向null。getmemory中的p是臨時申請的乙個指標變數,當str傳值進來(null),時,p指向null,除此之外,沒做任何改變。當執行malloc函式後,也只是將malloc返回的的指標位址賦給了p,並不能傳遞給str。所以這裡就需要指標的指標了

#include

"stdio.h"

void

getmemory

(char**p

,int

num)

void

main

()

這個時候就是將指標變數str的位址傳遞了過去,而不是將指標變數的值(null)傳遞了過去,因此就可以改變str的指向了。

指標作為引數傳遞

如果想通過函式呼叫得到n個要改變的值,可以採取下面的步驟 在主調函式中設n個變數,用n個指標變數指向它們 編寫被呼叫函式,其形參為n個指標變數,這些形參指標變數應當與主調函式中的n個指標變數具有相同的基型別 在主調函式中將n個指標變數作實參,將它們的值 是位址值 傳給所呼叫函式的n個形參指標變數,這...

指標作為函式引數傳遞

值傳遞,指標傳遞?這幾天在學習c過程中,在使用指標作為函式引數傳遞的時候出現了問題,根本不知道從何得解 源 如下 createnode binnode tree,char p 該 段的意圖是通過乙個函式建立乙個二叉樹的節點,然而在,呼叫該函式後,試圖訪問該節點結構體的成員時候,卻發生了記憶體訪問錯誤...

指標位址作為引數傳遞

在做gpu cuda 高效能計算時遇到乙個問題 host 中分配的gpu變數怎麼在 host 間傳遞。其實這轉換過來是乙個函式間指標型變數的傳參問題。指標本身也是乙個變數,裡邊儲存的是位址,如果需要在函式間傳遞可修改自身位址的指標 指標型變數 那麼有兩種方法實現。取該指標的位址,作為乙個新的指標傳遞...