c語言里的傳地址引用問題,c語言傳地址和傳值

本文目錄一覽:

C語言里的傳地址引用問題

c語言參數是不能改變的,這是基本規則。試圖改變變數地址值,是不允許的。地址裡面存放的內容,才是可以改變的。

swap(int *p1,int *p2)

{int t;

t=*p1;

*p1=*p2;

*p2=*p1;

}

要改變地址,要用指針的指針。

int **p1,int **p2

C語言數據結構中地址傳遞問題。

指針只是內存地址,他需要指針實體才具備數據操作;

而類型定義的變數在C語言是個實體對象,它包含數據在內;

你聲明了一個結構指針,卻沒有結構實體,是不能進行操作的;你的指針不知指到哪裡去,運行就死了。

想用指針,應該這樣:加個結構實體,指針指向結構實體就可以了。

stacklist Ro,*s;

s=&Ro;

C語言 傳值 傳址 傳引用

我來詳細解釋一下: void test1(int a)

{

a = 100; //這裡的a是根據參數a而構造出的一個副本,暫存於棧中,與實際參數a完全處於不同內存。

//當函數退出時,a自動無效,修改a的值只是修改棧中這個a的值,無法修改實參。

//如果使用的是C++傳遞的是一個類的話,同樣需要構造一個副本,函數退出時也會析構

//該副本,因此會加大構造和析構的開銷,同時會加大內存開銷用於保存臨時副本

}void test2(int* a)

{

*a = 1000; //這裡的a和傳值一樣,也是構造的一個副本,不過這個副本是一個指針,同樣暫存域棧中

//同樣需要加大創建這個指針副本的內存,32位機器為4位元組,即存放這個副本用的

//同樣與實參a指針處於完全不同的內存

//但是,雖然這兩個指針處於不同內存,他們指向的地址卻是同一個地址

//我們通過*操作符來解析指針指向的地址的值(簡稱解引用)

//*a = 5;這句代碼的意思是將副本a指向的地址的值改變為5

//由於副本a指向的地址與實參指向的地址相同,即改變了實參指向的地址的值

//因此實參a指向的地址的值變成了5 //可以解釋的形象一些,

//假如實參a自身處於內存0x01,它指向地址0x03

//那麼這個副本處於的內存不會是0x01(因為它是構造出來的一個副本指針),我們假設它自身地址

//為0x02(只是假設,這個地址值肯定是在棧當中的),而它指向的地址一樣是0x03

}void test3(int* a)

{

int tmp;

a = tmp; //接著test2講,由於這裡的a是一個構造的副本,如果我們改變它,讓它指向tmp的地址

//就不會改變實參指向的地址的值,這裡只是將副本指向的地址改變了而已 //解釋的形象一些,

//同理假設實參a自身內存為0x01,它指向地址0x03

//這裡的a的自身內存為0x02,它也指向地址0x03

//tmp地址為0x04

//a = tmp;這句代碼的意思是讓a指向tmp的地址,即副本a指向了tmp地址0x04

//而實參a指向的地址的值沒有發生任何變化

*a = 10000; //這裡對形參a的任何操作已經於實參a毫無任何關係了

//因為它自身地址是0x02,它指向的地址是0x04

}void test4(int a)

{

a = 100000; //這裡的a與實參a完全一樣了,在這裡對a的任何操作等價於對實參a的操作

}

void main()

{

int a = 1;

int b = 2;

int c = 3;

int d = 4; printf(“操作前各值\na:%d\tb:%d\tc:%d\td:%d\n”, a, b, c, d); test1(a);

test2(b);

test3(c);

test4(d); printf(“操作後各值\na:%d\tb:%d\tc:%d\td:%d\n”, a, b, c, d);

} 附圖:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271388.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 14:55
下一篇 2024-12-16 14:55

相關推薦

  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智慧等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • cmd看地址

    本文將從多個方面詳細闡述cmd看地址,包括如何查看本機IP地址、如何查看路由器IP、如何查看DNS伺服器IP等等。 一、查看本機IP地址 要查看本機IP地址,首先需要打開cmd窗口…

    編程 2025-04-29
  • 如何解決WPS保存提示會導致宏不可用的問題

    如果您使用過WPS,可能會碰到在保存的時候提示「文件中含有宏,保存將導致宏不可用」的問題。這個問題是因為WPS在默認情況下不允許保存帶有宏的文件,為了解決這個問題,本篇文章將從多個…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 尚矽谷官網地址用法介紹

    尚矽谷是國內一家領先的技術培訓機構,提供了眾多IT職業的培訓,包括Java、Python、大數據、前端、人工智慧等方向。其官網地址為http://www.atguigu.com/。…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Java Thread.start() 執行幾次的相關問題

    Java多線程編程作為Java開發中的重要內容,自然會有很多相關問題。在本篇文章中,我們將以Java Thread.start() 執行幾次為中心,為您介紹這方面的問題及其解決方案…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網路爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29

發表回復

登錄後才能評論