![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - C語言關於指標的例題疑問?
(https://www.pcdvd.com.tw/showthread.php?t=514146)
|
|---|
C語言關於指標的例題疑問?
老師說以下這個程式你真的能夠了解,那指標的部分你就沒問題了,想忘也會忘不掉...
struct stackekement{ int element; struct stackelement *next; } struct stackekement*stack; stack=NULL; void push(int stackin,struct stackelment **stack) {struct stackekement *temp; temp=(struct stackekement *)malloc(size(struct stackekement)); temp->element=stackin; temp->next=*stack; *stack=temp; } ...POP的部分略刪,上課了時候老師有在黑板上畫圖解釋這個程式,看的時候還勉強可以 理解,但是下課後自己看到後面就傻掉了... 想請問: 1.一開頭的"struct stackekement{"是什麼意思??宣告第一個大括弧裡面的東西而已? 那這樣第一個大括弧下的"struct stackekement*stack"和他有什麼關係又是什麼意思?? 2. temp=(struct stackekement *)malloc.......我知道這是要將malloc處理完的東西casting(強迫轉型),但是..."(struct stackekement *)"這又是什麼意思?那個*號不是指指標而是指casting為"struct stackekement"?? 3."*stack=temp"這是指將temp這個指標內的值給副程式中的stack指標還是給主程式的stack指標??如果改寫成"*stack=*temp"在C的文法裡面會正確嗎?? 這是資料結構上的東西,為了應付研究所計概部分會考到資結的東西,小弟是不是該裝個C語言的開發工具?(PS:我不知道那叫什麼,就是可以在電腦上面練習C的東西...) 裝那東西要花錢買嗎?初學者夠用裝哪套好 :confused: 先謝謝熱心為小弟解惑的前輩了,如可圖解小弟會更感激 :shy: |
1.
struct stackelement {...} 定義一個資料型態。 如同使用「int *a;」宣告一個指向 int (C語言內建的資料型態) 的變數 a,「struct stackelement* stack; 」宣告一個指向 sturct stackelement (使用者自行定義資料型態) 的變數 stack。 2. 表示 temp 是一個指標,將來被 temp 所指向的變數的資料型態應該要是sturct stackelement。 3. stack 是函數 (您所說的副程式) 內的區域變數,型態為 struct stackelement**。 「*stack=*temp」左邊的資料型態是指標,右邊的資料型態是一個結構,so...。 |
http://www.bloodshed.net/dev/devcpp.html
Dev-C++ 免費 又好用的 C/C++ 開發軟體 這一段 主要是老師要說明 利用 Link List 實做出 STACK 之前應該有實做過利用 Array 做成的 STACK吧 |
好難
就跟要我解釋 [怎麼騎腳踏車] 一樣 我只會用... |
從你提的三個問題
看來你對指標還有不了解的 也對一些C 的 基本認知還不夠 先不要學 data struct, 先去對其他基本的 C 的語法很熟之後 在去讀 data struct 比較好 否則你還是一頭霧水,反而會更麻煩 指標只是一個address, 不是一個variable 我想這個問題不知你認為是什麼呢? char *temp_c; int *temp_i; long *temp_l; int a=sizeof(temp_c); int b=sizeof(temp_i); int c=sizeof(temp_l); 你覺得 a,b,c 哪一個值比較大? 由大小排列看看 不用說 a ,b,c 是什麼 只要排出他們的大小就好了 |
c b a
1234567890 |
你是在龍門補資節的嗎??
(我覺得老師都把簡單的東西複雜化,像這個東西沒必要用到雙指標ㄟ) 你用dev c++自己把code執行一遍,就會了解了!! 而 temp=(struct stackekement *)malloc(size(struct stackekement)); 這行可換成 temp=new stackekement; (c++語法,簡單,明瞭多了) 引用:
|
引用:
a,b,c相等對不對? 如果沒有: int a=sizeof(temp_c); int b=sizeof(temp_i); int c=sizeof(temp_l); 這些的話應該是: l >= i > c 對不對 :confused: |
基本上這只是一個[傳址](call by reference)的示範而已,
也就是利用指標傳值, 利用指標傳值可以回傳多個值, 而一班[傳值](call by value)只能回傳一個值; 這個範例只在說明指標在函式的利用方式而已. |
引用:
對 就是相等, a=b=c 因為都只是一個 address 的大小 :) 不會因為指向哪一種 type, 而改變大小 |
| 所有的時間均為GMT +8。 現在的時間是12:30 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。