c 形參改變實參(對指標的理解

2022-09-16 08:03:11 字數 1749 閱讀 1680

這幾天搞邏輯比較暈,居然把指標的概念都混淆了。

eg:int *p;//當然不對指標初始化在有些編譯器是通不過編譯的,比如vs(尤其是選中了sdl)

指標p是乙個物件,定義開始沒有分配了記憶體空間,只是定義了乙個指標而已。p存放的是物件的位址。

可見取位址運算子&改變了指標i的位址,使i指向a。解引用*,*i就是i存放位址的值。

由於作業設涉及到用形參改變實參,特意的再探指標定義。

下面看例子:

1.使用指標形參

正確**:

1 #include2

using

namespace

std;

3class

test48

void

get(int* p) //

形參指向a的位址9};

不改變i的位址。

首先先明確乙個問題。就是指標在定義時和使用時是不一樣的。eg:int a=0;

定義時是int*p=&a;定義後再次賦值是 p=&a;

然後模擬指標形參。

void get(int *p),你要傳進來的是乙個指標,某個變數的位址。也就是說,是乙個值。

所以當函式內部對同為位址(型別相同)的變數進行操作時,通過形參不能改變實參。

而,如果語句塊中寫的是時,情況就不一樣了。你要改變這個位址存放的資料了。

錯誤**:

(1)

1 #include2

using

namespace

std;

3class

test48

void

get(int* p) //

形參指向a的位址9};

可見並沒有成功,i的位址沒有變化,值也沒有變化為初始值3,不是2.

*p看作乙個整體,不然與值傳遞無異。

(2)

1 #include2

using

namespace

std;

3class

test48

void

get(int* p) //

形參指向a的位址9};

這個程式的意思是,i和q.a共用乙個位址。

2.使用引用形參

這個例子比較簡單,也好理解。就不放了。

總而言之,就是太過於形式化,不肯深入思考,**清楚定義概念問題。

c 實參形參

形參 形式引數 在函式定義 現的引數可以看做是乙個佔位符,它沒有資料,只能等到函式被呼叫時接收傳遞進來的資料,所以稱為形式引數,簡稱形參。實參 實際引數 函式被呼叫時給出的引數包含了實實在在的資料,會被函式內部的 使用,所以稱為實際引數,簡稱實參。形參和實參的功能是傳遞資料,發生函式呼叫時,實參的值...

java 形參改變與實參的關係

主函式 change函式 執行結果 結論 變數傳遞到函式中時是形參,是不是陣列都有引數。對於非陣列變數,引用型別形參和實參的位址不一樣但是他們指向的位址是一樣的,但是形參改變時會指向另乙個地方而實參指向的地方值不會變比如下圖 假如有s hel 現在有函式改變他為s pic 實際變化如下圖 基本資料變...

c 實參和形參

c c 中的實參和形參 今天突然看到一道關於形參和實參的題,我居然不求甚解。藐視過去在我的腦海裡只有乙個引數的概念,對於形參和實參的區別還真的不知道,作為學習了幾年c 的人來說,真的深深感覺對不起自己對不起c 老師 t。t 我覺得只要明白了值傳遞和位址傳遞,就應該能明白形參和實參的具體工作細節了。1...