不懂C語言關於指標中的指標的問題,有通俗易懂的解釋嗎

2021-03-05 09:18:34 字數 2976 閱讀 9423

1樓:匿名使用者

這兩個好像都不行吧,第一個多了一層

指標,第二個少了一層指標

首先你要明白指標的作用,他只是作為一個代號來使用,就如同一個人的綽號一樣,或者是如門牌號

c中,每一個變數都有一個記憶體空間來儲存他的資料,二這個記憶體空間是有一個地址來標示的,知道這個地址,就可以對這個變數進行操作,編輯器也是這麼幹的,編譯成exe後,是沒有變數名的存在的,只有地址來標示

一般的變數,對應的地址中儲存資料,而指標變數的地址空間中儲存的資料是一個地址的標示

如一般的變數,int a=5;那麼a這個變數空間中的資料時5,假如a變數在記憶體中的地址0000 1010

那麼給予int *p=&a;的話,那麼p變數的記憶體空間中儲存的資料就是0000 1010這個資料,也就是一個地址,但p變數申請的記憶體空間可能是0000 1016,也就是說記憶體空間中00001016這個地址中儲存的資料時0000 1010,二記憶體空間0000 1010這個地址中儲存的資料時5

訪問p就是訪問p的記憶體空間00001016,訪問*p就是訪問p指向的空間0000 1010

這樣應該明白記憶體空間和資料之間的關係以及指標的作用了吧

接著說你的程式,其實就是一個子函式引數的問題

子函式有幾個特性

1、只能返回一個資料,多個返回只能用全域性變數或者指標(陣列名也是指標)

2、實參和形參不在衣蛾地址空間中,除非用&取地址(這是一個指標的用法)

你的程式,返回兩個資料,並且不用全域性變數,那麼只能用指標

程式只能有一種void swap(int *a,int *b)

別的方式都不對

這是交換ab指標指向的空間中的內容,而不是ab指標本身

道理是不在同一個記憶體空間中,交換指標本身不能影響到主函式的資料

用這個&也是一樣的道理

2樓:匿名使用者

c語言中函式的引數傳遞都是傳遞值的。

假設swap函式你是這樣寫得

swap(int a,int b)

。這函式內部a和b的值確實是改變了,但是在main中的a和b不會改變的。

你寫得第二個程式應該編譯都不會通過。temp是一個整型值,而a是一個整型指標,兩者之間無法賦值。

3樓:adore_喬布斯

思維混亂 整形變數去存指標地址? 你也沒搞清楚區域性變數的含義。

c語言裡%d%i 的意思,通俗點,書上不懂

4樓:手機使用者

%d 對應整型資料 %i 對應帶符號整型資料 帶符號,就是常見的「+」、「-」

5樓:白刺客

%d和%i是一樣的,signed decimal integer,有符號十進位制整型

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

6樓:仙

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

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

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

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

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

7樓:匿名使用者

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

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

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

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

8樓:笛芭訪

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

9樓:匿名使用者

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

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

c語言中建立動態連結串列要用雙重指標嗎?那個雙重指標有什麼作用?

10樓:匿名使用者

舉個例吧,

假如一個結構:linknode

初始化:initial(linknode **p);//這裡就是雙指標

那麼在呼叫就這樣,

linknode *p;

initial(&p);

原理就是,如果你要通過函式來改變某個引數的值,那麼就要傳該引數的地址進去。

這裡p是一個指標,所以要傳指標的地址進去,也就是一個指向指標的指標;

初始化函式initial(linknode *(*p));(*p)是指標,*(*p)就是傳指標的地址進去了,意思就這樣,不知道你聽不聽得懂。

不管動態還是靜態,只要是要通過函式來改變指標型別資料的值,就要用雙重指標。

11樓:匿名使用者

樓上講得不錯

再幫補充一下細節:

這樣呼叫

linknode *p = null;

initial(&p);

經過 initial(&p) 的作用後,p就不再是 null 了,而是一個真正可用的連結串列指標

c語言陣列與指標問題,c語言陣列與指標的問題關係請教

1,書上說的不準確,陣列應該看做一種獨立的型別,sizeof只與型別有關。詳細的可以參考這個 http 如果你弄明白了這個剩下就簡單了。2,我先說一下結論吧。按照你的要求應該這樣定義p int p 3 因為你想要的是訪問每一行的數字,所以需要p為整型指標的陣列,這樣每個元素是整型指標,可以像p 1 ...

c語言的指標問題,C語言的指標問題

printf c p 3 分佈來看,c是要列印輸出一個字元。p指向那個字元陣列,p就是字元 a 那麼 a 3是多少呢,a 1是b 2 是c 3 是d注意是 p 3 而不是 p 3 這是由區別的。是的。p 3。是對p指向的那個值加3,p開始是指向a的,故a加3後就是d了 而p 執行3次的話,是指標p本...

c語言中指標加減問題,求解答C語言中指標問題真的求,搞不懂,求解答?

首先 float a 10 p,q p a 4 q a 7 那q p 2 a 4 與a 7 之間有兩個元素 這裡就不對了,q p 3 不是等於2,可以用printf d q p 看看。p 3 p 12 是地址按 位元組 排列的位置差,表示p 3和p之間有12個位元組 q p 3 表示q和p之間有3個...