c語言中的指標有什麼意義,C語言中的指標有什麼意義

2021-03-04 06:24:06 字數 5693 閱讀 9324

1樓:賣襠勞肯上

寫簡單的程式的話不用指標也行了吧. 比如這裡a是一個地址(編譯後), 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.

對於指標的便利,我現在能想到的,可能是:

函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷(c++裡的拷貝建構函式在做這件事),並且a,b函式操作的都是同一個記憶體塊裡的東西,如果這就是目的,那麼傳指標就是很有效率的做法(如果不用指標就可能要用一個全域性的變數了). 用一個指標(函式指標)存放一系列同型別的函式名(入口地址),方便函式呼叫. void*型別指標可以存放任何型別指標.

讓父類型別指標指向任何子類物件可以實現動態繫結. 寫著寫著似乎指標還挺有用,呵呵.

2樓:米蘭易橋

看你的需要了,有時不用指標作為引數達不到你要的效果,比如一個swap()函式。

intswap(int

a,int

b)如果你想呼叫該函式交換兩個變數的值,在主函式中輸出,那是不可能的。比如這樣呼叫:

intx=1,y=2;

swap(x,y);

printf("%d

%d",x,y);

你認為會輸出2

1嗎?錯!還是會輸出1

2的。因為傳入swap()函式的只是x,y的拷貝,而不是它們自身。

如果要真正達到交換的目的,就要用指標傳值。這樣定義函式:

void

swap(int

*a,int

*b)但是給函式傳值時要注意,指標是指向地址的,所以引數要是地址,即需要給變數取地址。

intx=1,y=2;

swap(&x,&y);

printf("%d

%d",x,y);

這樣就是輸出21了!

c語言中指標存在的意義

3樓:匿名使用者

計算機計算暫存器自加1的指令一般耗用一個時鐘週期,而加法和減法運算需要耗用許多時鐘週期。因此,做變數的自加或自減就要比做加法或減法的效率高很多。

在訪問大資料量的資料時,如果不關心資料距離資料開始的位置,只需要訪問當前資料,或當前資料左右上下位置時(比如做影象資料的逐點或區域處理計算),使用指標指向影象資料,就能利用自加或自減快速訪問陣列中的畫素資料,而不必用類似uimage[24][76]這樣的方式來訪問(這樣的訪問會用到一次乘法和一次加法運算)

在函式呼叫或返回時,如果引數或返回值並不是簡單資料型別的資料時,可以利用指標指向一個複雜資料的集合體(陣列、結構、類),這樣只傳遞資料型別和起始地址就可以交換複雜資料了,這種方式傳遞地址就是使用的指標型別引數。

4樓:

沒有指標的話c語言就沒有存在的價值了

在c語言中什麼是指標?指標是幹什麼用的?,有什麼意義?

5樓:仙

寫簡單的程式的話不用指標也行了吧. 比如這裡a是一個地址(編譯後), 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.

對於指標的便利,我現在能想到的,可能是:

函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷(c++裡的拷貝建構函式在做這件事),並且a,b函式操作的都是同一個記憶體塊裡的東西,如果這就是目的,那麼傳指標就是很有效率的做法(如果不用指標就可能要用一個全域性的變數了). 用一個指標(函式指標)存放一系列同型別的函式名(入口地址),方便函式呼叫. void*型別指標可以存放任何型別指標.

讓父類型別指標指向任何子類物件可以實現動態繫結. 寫著寫著似乎指標還挺有用,呵呵.

c語言中的「行指標」與「元素指標」有什麼區別?

6樓:鍵盤雀躍

int a[4]=

1 2 3 4

^ ^

a[0] a[1] a[2] a[3]a是一維陣列名,代表陣列的首地址.也就是a[0]*(a+1) 指標移動2個位元組,指向下一個陣列元素,就是a[1]int a[3][4]=,,}

^ ^

*a[4] 或a[4] 或a[3][4] 都可以表示行指標.操作a是二維陣列名,代表二維陣列的首地址,也就是a[0][0] = 1

*(a+1)[4] 指標指向a[1][0] = 5 ,也就是指向下一行陣列元素的首地址.一次跳躍到下一行.

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

7樓:匿名使用者

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

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

8樓:杜爺1號

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

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

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

9樓:匿名使用者

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

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

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

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

10樓:匿名使用者

指向地址啊。

比如a是指標

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

呼叫其中數字。

11樓:匿名使用者

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

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

int *p;

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

12樓:奧·備侖思

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

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

13樓:天涯海角情緣在

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

14樓:匿名使用者

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

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

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

15樓:匿名使用者

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

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

16樓:嘩嘩嘩嘩

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

基本說明:

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

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

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

17樓:張簡元芹是群

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

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

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

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

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

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

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

指標的基本概念

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c語言中變數指標輸出問題,C語言中變數指標輸出問題

這和printf用 s的規則相關。首先ps是一個指向字元型資料的指標 printf用 s修飾輸出時需要提供一個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或...

C語言檔案指標,C語言中通過檔案指標訪問檔案有什麼好處?

你還沒解決嗎?你的bug應該不是檔案方式的問題。我才起來給你除錯,應該是 這一句的問題 fp1是檔案指標,fopen s函式返回的值型別是errno t 也就是int型別的值,因fp1錯誤的使用,而接受了fopen s函式的返回值,此時fp1指標的值變成0x0000000d fopen s函式的返回...

c語言中如何讓指標指向已知地址,C語言中,如何讓指標指向一個已知地址

必須轉換型別,你的第二條是正確的。第一條編譯不通過的是錯誤的,因為他只是一個16進位制的數,而p是指標,是不能賦值的。也就是第一條賦值語句是將一個整數賦值給指標,肯定不行的。若是 0 是已經資料型別 是 t 那麼t p t unsigned long 0 若是在未知道的情況,可能崩潰 如果是整形 i...