問關於C語言指標的問題,我的理解是,指標是為了通過變數的記憶體位址間接訪問變數 但是既然可以直接

時間 2022-08-19 23:22:28

1樓:匿名使用者

你這樣讀書思考有什麼用?

自己寫乙個程式吧:

在子函式中交換兩個數的內容,在主函式中將轉換結果輸出出來。(這是c語言引入指標的第乙個例題)

把這個程式搞明白了,你就清楚了。然後再陷入另外的迷惑之中,呵呵,這是正常的必經之路。

2樓:

最直接的乙個好處就是可以通過在自定義函式中傳遞位址引數來改變原位址存放的內容,否則要改變乙個地方存放的值就只能在main函式中進行,不符合c語言模組化的特點,而且如果做的專案很大,有時候必須在自定義函式中改變源位址存放的值,就必須用到指標

3樓:匿名使用者

指標是否能靈活使用是c學沒學好的標識;

4樓:

可以提高程式的編譯效率和執行速度,使程式更加簡潔。

通過指標被呼叫函式可以向呼叫函式處返回除正常的返回值之外的其他資料,從而實現兩者間的雙向通訊。

利用指標可以實現動態記憶體分配。

指標還用於表示和實現各種複雜的資料結構,從而為編寫出更加高質量的程式奠定基礎。

利用指標可以直接操縱記憶體位址,從而可以完成和組合語言類似的工作。

。。。。。。

。。。好處多著呢,現在編寫小程式,都情不自禁的使用

c語言中指標變數怎麼理解?怎麼用?

5樓:申覓荷

指標變數是乙個存位址的變數,賦值是只能傳位址(跟int型只能賦值整型一樣的)

6樓:顏海鏡

不知道你會不會彙編指標其實就是暫存器間接定址

我覺的這樣解釋最直接容易理解,當然是要你會彙編的話,不懂的話,指標其實是個變數只不過這個變數的值是位址

有沒有c語言大神解釋一下指標的間接訪問和直接訪問?還有指標是不是既是乙個位址,又是乙個變數?

7樓:

間接訪問是通過指標變數存放的位址訪問的,直接訪問就不用借助指標變數,指標可以認為是位址,但不是變數,指標變數才是變數,只是國內書都把那兩個混在一起

問乙個關於c語言指標位址的問題?

8樓:匿名使用者

1、&a是取a變數的記憶體位址,把這個位址值存入b變數邏輯上是沒有問題的。

但存位址有專門的存位址的箱子的型別(int*),b是存整數的箱子型別(int)啊,所以應該進行顯式(強制)型別轉換,變成:

1 int a=100;

2 int b=(int)&a;

2、在定義變數語句中的int *b和表示式中的*b確實不代表同乙個意思。int *b中的*和int一起代表一種整型的指標型別,你可以將int*作為乙個整體來理解,它表示一種型別。表示式中的*b才是做指標運算的,表示取出b的值所表示的位址中的值(b所指向的位址中的值)。

關於c語言指標讀取記憶體位址的問題,高手請進

9樓:檢頌

....去看看程序間通訊吧.每個程序都有獨立的位址空間,不是說訪問就訪問的,沒有許可權..要是這麼容易的話qq密碼就不那麼難得到了..

10樓:風隨風

其實對於main主函式來說,它也是乙個被調函式,只不過呼叫它的是系統而已。樓主肯定知道在c中被調函式結束後,其定義的所有變數所佔的記憶體是被釋放的,所以再想執行另一段程式用指標指向該位址,不可能得到你所認為應該存在的值的

11樓:匿名使用者

因為0x0012ff60實際是指向乙個臨時的緩衝區,通常是堆疊.

通常這個值只在程式執行時有效.

你的這個問題實際並不是乙個問題, 而是對程式執行方式的理解還不夠透徹.

如果你實在想搞清楚,建議參考一些彙編的書籍.

c語言中「指標」和「指標變數」的區別是什麼??

12樓:大野瘦子

1、概念不同

「指標」是概念,「指標變數」是具體實現,指標也是乙個變數,所以需要進行定義,而對於指標的定義,與一般變數一樣。

2、 存放位址不同

乙個變數的(記憶體)位址稱為該變數的「指標」,通過指標能找到以它為位址的記憶體單元。而指標變數是用來存放另乙個變數的位址的(即指標)。

指標和指標變數的關係

1、指標就是位址,位址就是指標。

2、位址就是記憶體單元的編號。

3、指標變數就是存放記憶體位址的變數。

4、指標和指標變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指標變數簡稱為指標,實際他們含義並不一樣。

注:指標裡存的是100. 指標:位址 - 具體。

指標裡存的是位址,指標:指標變數 -可變。

指標的好處:

1、直接訪問硬體

2、快速傳遞資料(指標表示位址)

3、返回乙個以上的值返回乙個(陣列或者結構體的指標)4、表示複雜的資料結構(結構體)

5、方便處理字串

6、指標有助於理解物件導向

13樓:蓋辜苟

用例子來看一下。

int a=3;

int *p;

p=&a;

現在來看一下。a=3這個式子先解釋一下

等式右邊是常量,左邊是變數。

同理的p=&a,左邊的是指標變數,右邊的是指標

指標的基本概念:為了區別記憶體的不同位置,記憶體被分成位元組,記憶體的全部位元組順序地賦予乙個稱為位址的編號。程式中的變數將在記憶體中佔據一定的記憶體位元組,在這些位元組中儲存的資料資訊稱為變數的內容。

乙個變數占用連續的若干個記憶體位元組時,最前面的乙個位元組的位址就作為該變數的位址。指標就是記憶體位址,是變數的位址,或函式的入口位址。變數的位址在程式執行時,起著非常重要的作用。

當計算機在計算含有變數的表示式時,計算機按變數的位址取出其內容,並按變數的位址將計算結果存入到變數佔據的記憶體中。

如**:  int x=l;  x=x+2;  其中語句「x=x+2;」中的第乙個x涉及到變數x佔據的記憶體,第二個 x是引用變數 x的內容。該語句的意義是「取x的內容,完成加上2的計算,並將計算結果存入變數x佔據的記憶體中。

」指標變數和它所指向的變數:在c語言中,位址也作為一種值,能被儲存、比較、賦值,並稱位址資料為指標型別,而稱儲存位址值的變數為指標變數,簡稱指標。c程式可用運算子&取變數的位址,如表示式&x的值就是變數x的位址。

程式除能按名引用變數外,也可利用變數的位址引用變數。按變數名引用變數稱為直接引用,而將變數a的位址存於另一變數b中,借助於變數b引用變數a稱為對a的間接引用。

定義指標變數的一般形式為:  型別 * 指標變數名;  或  型別 * 指標變數名=初值表示式;  其中,指標變數名是識別符號,指標變數名之前的符號「*」,表示該變數是指標型別的。而最前面的「型別」,表示該指標變數能指向變數或函式的型別。

初值表示式是乙個位址表示式,如表示式中有某變數的位址表示式,則這個變數應是前面已定義的。

在c語言中,當定義區域性指標變數時,如未給它指定初值,則其值是不確定的。程式在使用它們時,應首先給它們賦值。誤用其值不確定的指標變數間接引用其它變數,會引起意想不到的錯誤。

為明確表示指標變數不指向任何變數,在c語言中用0值表示這種情況,記為null。

如  ip= null;  也稱指標值為0的指標變數為空指標。對於靜態的指標變數,如在定義時未給它指定初值,系統自動給它指定初值0。

指標變數取程式物件的(開始)位址值,不能將乙個整型量或任何其它非位址值賦給乙個指標變數。另外,指標變數對所指向的物件也有型別限制,不能將乙個不能指向的物件的位址賦給指標變數。

如有以下定義:  int i=100,j,*ip,*intpt;  float f,*fp;  以下**如注釋所敘。  ip=&i;/*使ip指向i*/  intpt=ip;/*使intpt指向ip所指變數*/  fp= &f;/*使fp指向正*/  ip=null;/*使 ip不再指向任何變數*/

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為"指標"。

意思是通過它能找到以它為位址的記憶體單元。 在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法位址之中。指標參考了儲存器中某個位址,通過被稱為反參考指標的動作,可以取出在那個位址中儲存的值。

作個比喻,假設將電腦儲存器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是乙個指向特定頁面的指標;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指標進行反參考的動作。

指標是程式語言的乙個重要概念。指標在c程式中有以下多方面的作用:

利用指標能間接引用它所指的物件。

利用各種型別的指標形式引數,能使函式增加描述能力。

指標與陣列結合,使引用陣列元素的形式更加多樣、訪問陣列元素的手段更加靈活。

指標能用來描述資料和資料之間的關係,以便構造複雜的資料結構。當乙個資料a要關聯另乙個資料b時,在資料a中增加乙個指向資料b的指標就可實現資料a關聯資料b。結合系統提供的動態分配儲存設施,又能構造出各種動態資料結構。

14樓:

比較嚴格的說法是這樣的:

系統為每乙個記憶體單元分配乙個位址值,c/c++把這個位址值稱為「指標」。如有int i=5;,存放變數i的記憶體單元的編號(位址)&i被稱為指標。

「指標變數」則是存放前述「位址值」的變數,也可以表述為,「指標變數」是存放變數所佔記憶體空間「首位址」的變數(因為乙個變數通常要占用連續的多個位元組空間)。比如在int i=5;後有一句int *p=&i;,就把i的指標&i賦給了int *型指標變數p,也就是說p中存入著&i。所以說指標變數是存放指標的變數。

有乙個事實值得注意,那就是有不少資料和教科書並沒有如上區分,而是認為「指標是指標變數的簡稱」,如對int *p=&i;的解釋是:宣告乙個int *型指標p,並用變數i的位址初始化;而嚴格說應該是宣告乙個int *型指標變數p才對。所以有時看書要根據上下文理解實質,而不能過於拘泥於文字表述。

15樓:大美人

區別在於:

1、「指標」是概念,「指標變數」是具體實現。指標也是乙個變數,所以需要我們進行定義,而對於指標的定義,與一般變數一樣。

2、乙個變數的(記憶體)位址稱為該變數的「指標」,通過指標能找到以它為位址的記憶體單元。而指標變數是用來存放另乙個變數的位址的(即指標)。

3、指標和指標變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指標變數簡稱為指標,實際他們含義並不一樣。

擴充套件資料

指標與c語言關係:

大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上。因此,說指標是c語言的靈魂,一點都不為過。同時,這種說法也讓很多人產生誤解,似乎只有c語言的指標才能算指標。

指標變數概括:

1、存放位址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的位址。

2、如果乙個指標變數存放的是某個物件的位址,則稱這個指標變數指向該物件。在c++程式設計中,指標變數只有確定了指向才有意義。

c語言關於指標的基礎問題,C語言關於指標的基礎知識

左邊傳遞的是數值,所以,形參不會對實參產生任何影響!右邊傳遞的是指標,而且,在swap 函式中,對指標中的資料進行了交換 變更 導致實參所對應的變數中的資料發生了變化。形象來說,傳指標到子函式,相當於把房間位址傳到子函式中,子函式根據房間位址,對房間中的物品進行處理。實際就是處理的實參對應的房間。關...

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

a b 的意思是把b的值賦給a 不要因為 是賦值符號,就理解為把a賦值給b,其實 就是等號 結構體指標訪問成員時使用 結構體訪問成員時使用 struct stu a,b b a a.id 10 b id 12 本人對第五行的max min array 不理解,為什麼 array可以同時指向max和m...

關於c語言指標的一些問題,關於C語言的指標問題 指標的位址 1問題

首先回答你的問題 p a 當a是乙個和p同型別的非指標變數時成立2,p a 0 當a是乙個與p同型別的陣列時成立3.a p 當a是乙個和p同型別的指標時成立因此這三種寫法可以都認為是對的 1.指標在被定義的時候,為其賦值要把它當做位址來處理。例如int a 0 int p a 2.除了定義的時候,其...

c語言指標的問題,求高手,C語言中,關於指標傳遞的乙個問題,求高手解?

char pformat hello int ptemp int pformat pformat,得到的是pformat的變數記憶體位址,其結果型別為char 指向指標變數的指標,其實也就是乙個記憶體位址,可以用整型指標變數來儲存。int ptemp,這裡的ptemp就是整型指標變數,儲存 pfor...

C語言中指標陣列的問題,c語言關於指標陣列的問題?

這樣看 0x00 0x78,0x99 0x78 h e l l 0 0 0x99 w o r l d 0 其中s就是0x00,然後,s 0 就是 0x00 0 0x00 取內容,得到的值是0x78,然後列印的就是hello s,就是相當於s 0 s 1,因為優先順序關係,先執行s 0 就是 0x78...