「指標可以作為輸出引數」是如何理解啊?

時間 2025-07-28 04:11:45

1樓:網友

指標就是乙個long型的變數,表示乙個記憶體位址,所以怎麼輸入輸出都行的。

不過在呼叫函式的過程中,函式的內部變數或非引用的輸入變數都是臨時變數,在函式帆茄清呼叫結束的時候,它們佔用的態前空間都會被釋放掉,所以如果你把它們的指標作為結果輸出的話,呼叫函式的那個語句得到的已經是一段非法位址(已經納孫被釋放了所有權就不是你的了)了,對它進行操作就會產生執行時錯誤。

2樓:孫冰男

舉例子 void function(type param1, type param2),其實在執行函式時,編譯器會為函式的每個引數製作臨時副本如_param1,_param2,副本即內容的拷貝,即_param1的內容即param1的內容。

在函式體內,param1=x;實質上執行的是_param1=x;「值傳遞方式實現不了兩輸入引數的交換」是因為這個原因:

void swap(int a, int b)

int temp;

temp = a;

b = a;

a = temp;

在經器鄭祥之後,大致成了這個樣子(從原理上):

void swap(int a, int b)

int _a,_b;

int temp;

a = a;

b = b;

temp = a;

b = a;

a = temp;

值傳遞方式達不到交換的要求,道理很淺顯。

讓我們來看看指標傳遞吧。

void swap(int *a, int *b)

int temp;

temp = a;

a = b;

b = temp;

同理器要為兩個指標引數生成臨時副本_a和_b。如下:

void swap(int *a, int *b)

int *_a,*_b;

int temp;

a = a;

b = b;

temp = a;

a = b;

b = temp;

為什麼它能達到交換的目的呢?因為副本和引數是指向同一位址的指標,因此修改副本指標所指向的內容即修改引數指標所指向的內容,這是為什麼指標可以作為輸出引數的原因。

應該明白了吧 就是說函式改變了在類中這個引數的值 而悶叢正用值傳遞達不到改變的目螞悔的。

如何把指標作為引數?

3樓:信必鑫服務平臺

1、陣列的長度一般習慣採用巨集皮鄭定義,方便後續專案較大時的修改。

2、程式中儘量有一些錯誤控制,即考慮完善一些,例如上面的記憶體分配是否成功的判斷以及函式呼叫後是否達到預期目的的判斷。

3、使用typedef簡化定義。

4、使用null ==pps,而不是pps ==null是一種良好的程式設計習慣,這在有些面試中也會被問到,之所以這樣是因為當將「==誤寫成「=」時,前腔春者直接編譯出錯,後者則可以執行,這種隱蔽的錯誤很可伍握耐能導致整個專案出現混亂,這種bug有時候也很難被發現,所以這個習慣很重要,一句話就是「判斷時,等號左邊寫常量,等號右邊寫變數,防止少寫乙個等號帶來的嚴重bug」;

5、最後一定記得使用完指標要釋放記憶體,否則會出現記憶體洩露等問題。

指標「變數裡面的值」 和 「指標位址的值」 和 「指標指向的值」 有什麼區別?

4樓:津人依夢

指標「變數裡面的值」存放的是記憶體單元的位址;「指標位址的值」指的是指標的位址值,用「&」表示;「指標指向的值」指的是指標所指向的變數的值,用「*」表示。

指標是程式語言中的乙個物件,直接地對位址進行操作,其的值直接指向存在電腦儲存器中另乙個地方的值。通過位址能找到所需的變數單元,也就是,位址指向該變數單元。由此,位址形象化的被稱為「指標」。

其意是通過它能找到以它為位址的記憶體單元。

指標一般出現在比較接近機器語言的語言,如組合語言或c語言。

5樓:風若遠去何人留

這幾種說法,代表著不同的含義,有著不同的值,以及不同的資料型別。具體說明如下:

int a;//定義乙個變數a。

int *p;//定義乙個指標p。

p=&a; //將a的位址賦值給p。

1、 指標變數的值,指的是p本身的值,寫作p, 在這裡是a的位址,型別為int *型;

2、 指標位址的值,指的是p的位址值,寫作&p, 這個位址代表的記憶體,儲存出是p的值,型別為int **型,也就是二級指標;

3、指標指向的值,指的是p值代表的位址上儲存的值,寫作*p, 在這裡就是變數a的值,型別為int型。

以上三種,都是最常用的指標說明方式,必須要深入理解並靈活掌握,否則很難學好c語言。

6樓:眼眶的溼潤

無論是普通的變數還是指標變數在記憶體中都有乙個位址(如果已經分配好的話)

經過賦制操作,比如說p=&a,指標變數p裡的值是乙個位址,這個位址就是變數a的位址。

當然指標變數本身也有乙個位址。

指標指向的值就是指標變數的值裡的那個位址所對應的變數的值,也就是a的值,*p等於a。

不知道你理解了沒有?

指標變數和指標變數的值的區別

7樓:

摘要。您好,這裡是小度,很高興能您的問題。

指標變數是指存放位址的變數。因位址的改變而做出指定性質的衡量變法。指標變數是用來存放另乙個變數的位址的(即指標)。

int a;//定義乙個變數a。

intp;//定義乙個指標p。

p=&a;//將a的位址賦值給p。

1.指標變數的值。指的是p本身的值,寫作p,在這裡是a的位址,型別為int型;

指標變數和指標變數的值的區別。

您好,這裡是小度,很高興能您的問題。指標變數是指存放位址的變數。因位址的改變而做出指定性質的衡量變法。

指標變數是用來存放另乙個變數的位址的(即指標)。int a;//定義乙個變數;//定義乙個指標;//將a的位址賦值給指標變數的值。指的是p本身的值,寫作p,在這裡是a的位址,型別為int型;

希望以上對您有所幫助~ 如果您對我的滿意的話,麻煩給個贊哦~諮詢已結束。

指標的定義方法,指標和變數的關係

8樓:網友

定義方法:

資料型別 *指標變數名;

如定義乙個指向int型變數的指標——

int *p;

則我們可以繼續寫如下**——

int a = 4;

p = &a;

printf("%d", *p);

在這裡,我們定義了乙個變數a,我們把它理解為記憶體空間連續的4個位元組(int型佔用4位元組),則這4個位元組的空間儲存著乙個數4。&是取位址符號,即把變數a的位址(即這4個位元組的首位址)賦給指標p(記住指標p的型別和變數a的型別要保持一致,否則的話,要進行型別轉換)。這樣子,指標p就儲存著變數a的位址。

我們如果把指標p當做記憶體空間裡面另外乙個連續的4個位元組,那麼這4個位元組儲存的數就是變數a的位址。printf("%d",*p)和printf("%d",a)的結果是一樣的。這裡的*是取變數符號(與&剛好作用相反,通過變數的位址找到變數),與定義時int *p的*號作用不同(定義時的*表示該變數是個指標變數,而非是取它指向的變數)。

指標在c語言學習中是乙個很重要的部分,在將來資料結構中也會大量用到,你可以多看看書上的例題來掌握它。推薦你翻閱譚浩強著的《c程式設計》第10章。

c 中為什麼陣列地址可以作為引數傳遞而不能直接賦值給別的陣列呢

這是甲魚的臀部 規定.因為陣列名錶示陣列的首地址,int b它要定義自己的陣列空間,當然不能用別的陣列的空間,所以不能把a傳給它.但陣列作為引數傳遞時,array只是個臨時指標變數,函式還是直接對實引數組進行操作,不需要另外生成陣列.樓上兩位說的a的指標,其實就是陣列首元素的指標,即陣列首地址,只不...

測謊儀能作為證據麼,測謊儀是是否可以作為證據使用

朝朝愛電影 你好。很高興為你解答,不可以的只能說是有理可依,不可全依賴儀器.1,測謊是一門科學,測謊儀是一種科學的心理測試儀器,即多參量心理測試儀,是綜合心理學 生理學和現代電子學以及其它應用科學技術而成的。其工作原理在於 人在說謊時,會引起一系列的生理變化 其實測謊儀是心跳監測儀,說謊時心跳加快所...

雪佛蘭探界者實力如何?它可以作為家用車嗎?

很多想要買車的人士,因為對於車輛市場不是特別的熟悉,於是就會在買車的時候非常的糾結,不知道到底買哪款車是好的。很多的預算在萬左右的人,都在關注雪佛蘭探界者這款車,但是,因為不知道這款車的效能 配置到底怎麼樣,於是在買的時候就非常的猶豫,不知道到底應不應該買。那麼關於雪佛蘭探界者實力如何?它可以作為家...