c語言中指標的作用是什麼C語言中指標的作用是什麼?

2021-03-04 09:32:43 字數 6944 閱讀 1962

1樓:匿名使用者

指標指向地址,指標的特性就是在地址不變的情況下,可以很方便的修改所指向的內容

最重要的應用有兩個,一是函式引數,二是函式指標函式引數:函式返回值只有一個,如果想回傳多個引數,則必須使用指標函式指標:典型應用就是**函式(callback)

2樓:杜爺1號

簡單地說指標就是指向變數和物件的地址。

指標的用途非常廣泛,比如如果你想通過函式改變一個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞一個地址就行,大大提高了效率。

以上還只是指標的初步應用,隨著你在c語言學習上的逐步深入,你會發現更多的用途的。

3樓:匿名使用者

用來簡單的標示一個地址引用。

指向變數地址,便於對變數操作。

就像桌面的快捷方式,它指向一個真實的檔案。

就像給儲存器的某個儲存地址單元起了個名字,操作這個名字就等於操作的這個儲存地址單元,比如,要給某個儲存地址單元賦值,這時候就把值賦給,指向這個儲存地址的名字。也就是說,使用指標表示地址單元比直接用記憶體地址號表示方式,更人性化,操作更靈活。

4樓:匿名使用者

指向地址啊。

比如a是指標

*a 就是指a地址所存的數字。

呼叫其中數字。

5樓:匿名使用者

指標是一種存放另一個變數的地址的變數。

比如申請一個整形變數 int a = 128; 再申請一個指標讓這個指標指向變數a.

int *p;

p = &a; //取a在記憶體中的地址,把a的地址賦給p。這樣p就指向了變數a的地址。

6樓:奧·備侖思

指標,首先從概念上是「變數」。

它存放的是記憶體地址,而不是具體資料。

7樓:天涯海角情緣在

怎麼說指標的作用呢?通俗點講就是當你用上指標的時候,你到目標地的就會有捷徑了,移動性強,可操作性很大,對於資料的刪除、插入、編輯都很方便,換成其他的,則比較麻煩。

8樓:匿名使用者

c語言中指標的作用是什麼?啊這個問題還不好一句回答。這是c本身是低階語言,能夠操動記憶體的特效決定的,早期的時候對計算機說這就是效率。

現在好像不是這樣說了,都說指標很危險,特別是在目前複雜作業系統下。

要是說作用是什麼?是求高效的低階語言特有的特質。

9樓:匿名使用者

指標啊,用來取一個元素在記憶體中的地址

請問c語言中 指標是什麼?有什麼作用?請用通俗的語言解釋

10樓:匿名使用者

通俗的說,就是你家的門牌號,

簡單地說指標就是指向變數和物件的地址。

指標的用途非常廣泛,比如如果你想通過函式改變一個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞一個地址就行,大大提高了效率。

以上還只是指標的初步應用,隨著你在c語言學習上的逐步深入,你會發現更多的用途的

11樓:笛芭訪

c語言中,指標變數代表的是一個地址,這個地址可以是變數的,也可以是涵數的,陣列的等等,這樣我們通過指標變數就可以訪問到變數地址中存放的內容,或是呼叫函式等,它非常靈活,具體的好處在程式設計中你才能慢慢體會到的,好好學習吧。

12樓:匿名使用者

在電腦裡定義一個量時會在記憶體中申請一的地址來存放這個值,

而指標就是一個存放值的地址的變數求採納

c語言指標的作用有哪些?

13樓:嘩嘩嘩嘩

指標的用途非常廣泛,比如如果你想通過函式改變一個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞一個地址就行,大大提高了效率。簡單地說指標就是指向變數和物件的地址。

基本說明:

1、在計算機中,所有的資料都是存放在儲存器中的。 一般把儲存器中的一個位元組稱為一個記憶體單元, 不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等;

2、為了正確地訪問這些記憶體單元,須為每個記憶體單元編上號。 根據一個記憶體單元的編號即可準確地找到該記憶體單元。既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。

記憶體單元的指標和記憶體單元的內容是兩個不同的概念。

14樓:張簡元芹是群

指標是c語言中廣泛使用的一種資料型別。

運用指標程式設計是c語言最主要的風格之一。利用指標變數可以表示各種資料結構;

能很方便地使用陣列和字串;

並能象組合語言一樣處理記憶體地址,從而編出精練而高效的程式。指標極大地豐富了c語言的功能。

學習指標是學習c語言中最重要的一環,

能否正確理解和使用指標是我們是否掌握c語言的一個標誌。同時,

指標也是c語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多程式設計,上機除錯。只要作到這些,指標也是不難掌握的。

指標的基本概念

在計算機中,所有的資料都是存放在儲存器中的。

一般把儲存器中的一個位元組稱為一個記憶體單元,

不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等,

在第二章中已有詳細的介紹。為了正確地訪問這些記憶體單元,

必須為每個記憶體單元編上號。

根據一個記憶體單元的編號即可準確地找到該記憶體單元。記憶體單元的編號也叫做地址。

既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。

記憶體單元的指標和記憶體單元的內容是兩個不同的概念。

可以用一個通俗的例子來說明它們之間的關係。我們到銀行去存取款時,

銀行工作人員將根據我們的帳號去找我們的存款單,

找到之後在存單上寫入存款、取款的金額。在這裡,帳號就是存單的指標,

存款數是存單的內容。對於一個記憶體單元來說,單元的地址即為指標,

其中存放的資料才是該單元的內容。在c語言中,

允許用一個變數來存放指標,這種變數稱為指標變數。因此,

一個指標變數的值就是某個記憶體單元的地址或稱為某記憶體單元的指標。圖中,設有字元變數c,其內容為「k」(ascii碼為十進位制數

75),c佔用了011a號單元(地址用十六進數表示)。設有指標變數p,內容為011a,

這種情況我們稱為p指向變數c,或說p是指向變數c的指標。

嚴格地說,一個指標是一個地址,

是一個常量。而一個指標變數卻可以被賦予不同的指標值,是變。

但在常把指標變數簡稱為指標。為了避免混淆,我們中約定:「指標」是指地址,

是常量,「指標變數」是指取值為地址的變數。

定義指標的目的是為了通過指標去訪問記憶體單元。

既然指標變數的值是一個地址,

那麼這個地址不僅可以是變數的地址,

也可以是其它資料結構的地址。在一個指標變數中存放一

個陣列或一個函式的首地址有何意義呢?

因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首地址,

也就找到了該陣列或函式。這樣一來,

凡是出現陣列,函式的地方都可以用一個指標變數來表示,

只要該指標變數中賦予陣列或函式的首地址即可。這樣做,

將會使程式的概念十分清楚,程式本身也精練,高效。在c語言中,

一種資料型別或資料結構往往都佔有一組連續的記憶體單元。

用「地址」這個概念並不能很好地描述一種資料型別或資料結構,

而「指標」雖然實際上也是一個地址,但它卻是一個資料結構的首地址,

它是「指向」一個資料結構的,因而概念更為清楚,表示更為明確。

這也是引入「指標」概念的一個重要原因。

c語言中void的作用是什麼?

15樓:匿名使用者

void 在c語言中意思為無型別

。 具體有兩種應用:

一、單獨的void,表示無型別,可用於函式返回值和引數列表。

1、用於返回值,寫作:

void func_name(param_list);

表示該函式沒有返回值,在函式中,如果要呼叫return返回,那麼return不需要帶任何引數。

2、用於引數列表,寫作:

ret_type func_name(void);

表示不需要引數,也就是引數個數為0。呼叫函式時寫作func_name();

注意,在c語言中,定義函式:

ret_type func_name();

即括號中留空,表示引數不定,而不是無引數。

二、用來表示指標:

寫作void *,這是一個特殊的指標型別,表示並沒有指定型別,對於void*型的取值,是違法的。

在c語言中,void*型指標,可以和任何其它指標型別相互賦值,而不需要強制轉換,這一點和c++是不同的。

16樓:ieio啊

void的字面意思是「無型別」,void *則為「無型別指標」,void *可以指向任何型別的資料。

void真正發揮的作用在於:

(1) 對函式返回的限定;

(2) 對函式引數的限定。

轉換運算子把賦值運算子右邊的指標型別轉換為左邊指標的型別。

例如:float *p1;

int *p2;

p1 = p2;

其中p1 = p2語句會編譯出錯,提示「'=' : cannot convert from 'int *' to 'float *'」,必須改為:

p1 = (float *)p2;

而void *則不同,任何型別的指標都可以直接賦值給它,無需進行強制型別轉換:

void *p1;

int *p2;

p1 = p2;

但這並不意味著,void *也可以無需強制型別轉換地賦給其它型別的指標。因為「無型別」可以包容「有型別」,而「有型別」則不能包

容「無型別」。道理很簡單,我們可以說「男人和女人都是人」,但不能說「人是男人」或者「人是女人」。下面的語句編譯出錯:

void *p1;

int *p2;

p2 = p1;

提示「'=' : cannot convert from 'void *' to 'int *'」。

void關鍵字的使用規則:

規則一 如果函式沒有返回值,那麼應宣告為void型別

在c語言中,凡不加返回值型別限定的函式,就會被編譯器作為返回整型值處理。但是許多程式設計師卻誤以為其為void型別。例如:

add ( int a, int b )

int main(int argc, char* argv)

程式執行的結果為輸出:

2 + 3 = 5

這說明不加返回值說明的函式的確為int函式。

林銳博士《高質量c/c++程式設計》中提到:「c++語言有很嚴格的型別安全檢查,不允許上述情況(指函式不加型別宣告)發生」。可是編譯

器並不一定這麼認定,譬如在visual c++6.0中上述add函式的編譯無錯也無警告且執行正確,所以不能寄希望於編譯器會做嚴格的型別檢查。

因此,為了避免混亂,我們在編寫c/c++程式時,對於任何函式都必須一個不漏地指定其型別。如果函式沒有返回值,一定要宣告為void類

型。這既是程式良好可讀性的需要,也是程式設計規範性的要求。另外,加上void型別宣告後,也可以發揮**的「自注釋」作用。**的「自注

釋」即**能自己註釋自己。

規則二如果函式無引數,那麼應宣告其引數為void

在c++語言中宣告一個這樣的函式:

int function(void)

則進行下面的呼叫是不合法的:

function(2);

因為在c++中,函式引數為void的意思是這個函式不接受任何引數。

我們在turbo c 2.0中編譯:

#include "stdio.h"

fun()

main()

編譯正確且輸出1,這說明,在c語言中,可以給無引數的函式傳送任意型別的引數,但是在c++編譯器中編譯同樣的**則會出錯。在c++

中,不能向無引數的函式傳送任何引數,出錯提示「'fun' : function does not take 1 parameters」。

所以,無論在c還是c++中,若函式不接受任何引數,一定要指明引數為void。

規則三 小心使用void指標型別

按照ansi(american national standards institute)標準,不能對void指標進行演算法操作,即下列操作都是不合法的:

void * pvoid;

pvoid++; //ansi:錯誤

pvoid += 1; //ansi:錯誤

//ansi標準之所以這樣認定,是因為它堅持:進行演算法操作的指標必須是確定知道其指向資料型別大小的。

//例如:

int *pint;

pint++; //ansi:正確

pint++的結果是使其增大sizeof(int)。( 在vc6.0上測試是sizeof(int)的倍數)

但是大名鼎鼎的gnu(gnu's not unix的縮寫)則不這麼認定,它指定void *的演算法操作與char *一致。

因此下列語句在gnu編譯器中皆正確:

pvoid++; //gnu:正確

pvoid += 1; //gnu:正確

pvoid++的執行結果是其增大了1。( 在vc6.0上測試是sizeof(int)的倍數)

在實際的程式設計中,為迎合ansi標準,並提高程式的可移植性,我們可以這樣編寫實現同樣功能的**:

void * pvoid;

(char *)pvoid++; //ansi:正確;gnu:正確

(char *)pvoid += 1; //ansi:錯誤;gnu:正確

gnu和ansi還有一些區別,總體而言,gnu較ansi更「開放」,提供了對更多語法的支援。但是我們在真實設計時,還是應該儘可能地迎合ansi標準。

這些C語言指標分別是什麼意思C語言中指標和指標變數的區別是什麼??

都是看與p結合的優先順序 1 p是個陣列,p是含有3個元素的陣列,每個元素都是int指標 2 p是個指標,指向一個 只有3個元素的陣列 的指標。3 p是個函式名 即p是函式 只有一個int引數,返回值為int指標 4 p是個函式指標,指向 只有一個int引數,返回值為int 的函式。5 p是個函式指...

c語言中指標加不加有什麼區別,C語言指標什麼時候加星號什麼時候不加

剛開始學習 baic,同樣有這du個疑問,在網上zhi查了一下,沒 有什麼讓人一目了dao然的解釋。專用int x作為屬 例子。既然int x 只是定義了一個記憶體空間,儲存一個記憶體地址,那麼普通的int x應該也可以做到。int num 5 int x int x1 x 和 x1 同樣儲存的是 ...

C語言中的空指標,C語言中的空指標是什麼意思?

int p 47 這個用法是不正確的 這個語句等於下邊的 int p p 47 你直接將指標p的值賦值為47是很危險的 應為如果記憶體中地址為47的地方剛好是某個系統程式或關鍵模組佔據的話你進行下面 p 20 的賦值行為 有可能導致系統直接崩潰哦 是的,不過這很危險。而且cpu的32位保護機制也未必...