C語言 為什麼不用指標,c 中,用不用指標有什麼區別?

時間 2023-08-23 04:44:29

1樓:匿名使用者

什麼時候用指標,什麼直接用變數要看具體的情況。

用指標速度比用變數會有所提高,那是指傳遞結構體等大型變數時。這時用指向結構體的指標來代替結構體變數可以減少結構體拷貝的過程。比如:

struct a

int n;

int m;

int fun1(struct a x)

return ;

int fun2(struct a *p)

return p->n;

int main()

struct a a;

fun1(a);

fun2(&a);

這裡fun2就比fun1效率高,因為對於fun1(),當傳入引數時,首先要進行結構體拷貝,即將a的內容拷貝到x中去。

=然後才返回的值。

而fun2()則沒有這個過程,直接返回的值(通過指標引用到的,即p->n)。

顯然這時傳指標要快一些,結果結構體很大,這種效率差距還會加大!

但是,如果不是傳遞引數,用指標引用變數就會比直接使用變數要慢。

因為程式首先要計算指標指向的位址,然後才能定位到相應的變數上,比直接用這個變數轉了一道彎,肯定就會慢些了,而且也不直觀,屬於畫蛇添足。

2樓:帳號已登出

速度是一樣的,甚至會慢。

指標速度比用變數會有所提高?一般是函式傳遞時是這樣。

但是*p1 是取p1的內容,m就是p1的內容。

執行速度還和編譯器的優化有關。

3樓:雨曄

效果其實差不多的。

因為程式小。

現在cpu計算速度那麼快。

人根本無法感覺到兩種演算法的速度差別。

不過在寫大型程式時。

這是個必須考慮的問題。

4樓:匿名使用者

if(m而*p,*p1雖然指向資料,但他其實是比較的位址。

5樓:度娘是農民

易讀性++速度相差不大!

c++中,用不用指標有什麼區別?

6樓:yx陳子昂

在c++裡面指標是很重要的概念,指標的傳遞可以大大提高效率。

c語言為什麼要有指標呢?

7樓:信必鑫服務平台

因為指標通過位址傳遞引數,如果不用指標傳送速度慢。

在沒有c++語言的年代,沒有物件導向、模板的語法支援,struct中還不能定義函式,用c語言想要對業務功能(演算法,此處即指函式)進行抽象,不想依賴具體的資料結構/資料型別,此時就必須用指向函式的指標來實現抽象與具體的分離,該函式的入參可以是void*,這樣呼叫者就可以傳入任意型別的引數了。後來有了c++,就用類成員函式和泛型(模板+functor)來代替了,這樣做有更強的靜態型別檢查機制和程式設計約束,有利於減少濫用風險。

函式指標的乙個典型應用場合是實現**,因為此時還不知道具體函式定義,事件發生時才呼叫、才確定;模擬於物件導向中的“多型”+設計模式中的“觀察者模式”,**的實質仍然是抽象。

c語言指標問題

8樓:

摘要。您好,1.首先分析用什麼語言寫。

本題是統計檔案裡的行數,單詞數,字元數的數量。對我而言,與其它語言相比,我比較熟悉c語言,面對這種小程式,我覺得用c語言寫更簡單一點。

2.分析需要用到幾個函式。

我們要統計行數,單詞數,字元數,所以要用三個函式來分別統計這三者。另外,還可以用乙個函式來統計這三者,程式執行時,可以直接顯示這三者。當然還有乙個函式就是main函式。

3.分別編寫函式內容。

每個函式裡的內容其實還是很容易的,我會在後面進行**展示及解釋。

c語言指標問題。

您好,1.首先分析用什麼語言寫本題是統計檔案裡的行數,單詞數,字元數的數量。對我而言,與其它語言相比,我比較熟悉c語言,面對這種小程式,我覺得用c語言寫更簡單一點。

2.分析需要用到幾個函式我們要統計行數,單詞數,字元數,所以要用三個函式來分別統計這三者。另外,還可以用乙個函式來統計這三者,程式執行時,可以直接顯示這三者。

當然還有乙個函式就是main函式。3.分別編寫函式內容每個函式裡的內容其實還是很容易的,我會在後面進行**展示及解釋。

使用c語言程式,題目已經有描述了。

您好,很努力為您查詢哦!您檢視問題,謝謝。

文獻查詢一般是通過關鍵詞進行查詢的,英文文獻的關鍵詞是出現次數最多的單詞。現給定一篇英文文獻,用乙個字串陣列儲存,陣列的每個元素儲存的是文獻中的一句話,書的內容不多於10000句。(單詞僅由字母構成)

1. 實現乙個函式,以文獻內容和乙個單詞為引數,統計文獻中該單詞出現的次數。

以引數形式返回給該函式的呼叫者),並將第一次出現該單詞在陣列中的位置指標作為返回值。

您好,我們只能為您查到這些內容哦,還是您好問問身邊朋友可能給您更詳細解答呀!謝謝

c語言指標問題

9樓:聽不清啊

這個圖中的第378行語句,在不同的編譯系統中,可能會有不同的解釋。所以一般在容易引起歧義的情況下,最好不要採用這種寫法,在這裡,他是先進行後面的自加操作的結果。

10樓:帳號已登出

專題講解c語言指標,幫助你在短時間內掌握指標的各種玩法。指標是c語言的難點,也是c語言的重點,玩不轉指標,學習c語言就沒有意義。

c語言為什麼要有指標呢?

11樓:網友

因為指標通過位址傳遞引數,如果不用指標傳送速度慢。

在沒有c++語言的年代,沒有物件導向、模板的語法支援,struct中還不能定義函式,用c語言想要對業務功能(演算法,此處即指函式)進行抽象,不想依賴具體的資料結構/資料型別,此時就必須用指向函式的指標來實現抽象與具體的分離,該函式的入參可以是void*,這樣呼叫者就可以傳入任意型別的引數了。後來有了c++,就用類成員函式和泛型(模板+functor)來代替了,這樣做有更強的靜態型別檢查機制和程式設計約束,有利於減少濫用風險。

函式指標的乙個典型應用場合是實現**,因為此時還不知道具體函式定義,事件發生時才呼叫、才確定;模擬於物件導向中的“多型”+設計模式中的“觀察者模式”,**的實質仍然是抽象。

12樓:逸_公子

很多情況可以用到。這需要在程式設計過程中形成一種思維。

如 將乙個結構體傳遞給乙個函式。

如果不用指標,傳送速度慢,如果通過指標,只要傳遞乙個位址。

struct example

void main()

fun(struct example *p)

13樓:匿名使用者

指標通過位址傳遞引數,可以雙向傳遞值。

如果你是計算機專業的學生,看《高階語言程式設計》裡面有詳細介紹二者的區別,也有程式對比(兩數交換的函式)。我比較懶,你就靠自己了。

c語言指標問題

14樓:彭珂的課堂

c語言_071_指標的定義和使用_上。

15樓:岔路程式緣

一、如有定義char y[4]= 321"

則表示式 *y+2的值是'5' 。

分析:y是字串陣列首元素'3'的位址,*y的值就是字元'3',再加上2,就是字元'5'(也可以說是字元'5'的asc碼值)。

二、 如有定義char z[2][4]=;則表示式*(*z+2)的值是 't'。

分析:z是二維字串陣列首字串“mat”的位址,*z的值就是“mat”首元素字元'm'的位址,再加上2,就是字元't'的位址,再取值,得到的就是字元't'。

三、如有定義char y[4]="321",*py=&y[0],則表示式*(py+2) 的值是'1' 。

16樓:網友

*y+2 = 0x35 = 5'

*z+2) =0x54 = t'

py+2) =0x31 = 1'

好好學習天天向上。

17樓:

首先*的運算優先順序是大於+的,所以先計算*y,在陣列表述中,變數名即是第零個陣列元素的起始位址,那麼*y就標識取得第零個陣列元素,*y='3',那麼*y+2='5'.

如有定義char z[2][4]=;則表示式*(*z+2)的值是。

C語言不用指標交換是什麼原理,為什麼C語言中陣列中的元素交換函式不用指標,而整形變數需要?

這是c 引用傳遞,不是c,引用又叫別名,就是用另乙個名字表示,同一物件的意思。引用傳遞,編譯器,實際上暗地裡採用了指標語法 是另一種位址傳遞方式,和pascal的 var 引數一致 c語言沒有真正的位址傳遞方式,全部都是值傳遞,不過可以通過指標的值傳遞,模擬位址傳遞方式。不過要有明確的表示,形參為指...

c語言中if語句如果可以不用加上else是不是就最好不加上去

叢素蘭鄭甲 一個是巢狀if,一個是巢狀else,其實兩個都能用。比如,輸入一個數a判斷是0還是正數還是負數,如果是0,a 0,如果是正數a 1,如果是負數a 1,1 if a 0 else a 1 2 if a 0 a 1 else if a 0 a 0 else a 1 看,兩種方法都能實現。 沒...

變壓器的鐵心有什麼作用,不用行嗎

農村小苑 可以不用!鐵心是用來導磁的,實現 電能 磁能 電能 的變換同樣,空氣也是可以導磁的 但是需要繞線很多很多。因為空氣的導磁率實在是太低。以至於只能做成電抗器來用 電抗器也是變壓器的一種 常用的變壓器鐵芯一般都是用矽鋼片製做的。矽鋼是一種合矽 矽也稱矽 的鋼,其含矽量在0 8 4 8 由矽鋼做...