![]() |
||
|
*停權中*
加入日期: Oct 2001 您的住址: 鬼島-高譚市
文章: 5,987
|
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的東西...) 裝那東西要花錢買嗎?初學者夠用裝哪套好 先謝謝熱心為小弟解惑的前輩了,如可圖解小弟會更感激 ![]() |
|||||||
|
|
|
Major Member
![]() 加入日期: Dec 2002 您的住址: 謎
文章: 265
|
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...。 |
||
|
|
|
Advance Member
![]() ![]() 加入日期: Nov 2004 您的住址: 陸地上..
文章: 439
|
http://www.bloodshed.net/dev/devcpp.html
Dev-C++ 免費 又好用的 C/C++ 開發軟體 這一段 主要是老師要說明 利用 Link List 實做出 STACK 之前應該有實做過利用 Array 做成的 STACK吧
__________________
![]() --------------------------------------------------- 酒是穿腸毒藥,色是刮骨鋼刀,財如下山猛虎,氣是無煙火砲。 無酒不成筵席,無色世間人稀,無財誰肯早起,無氣反被人欺。 |
|
|
|
Major Member
![]() 加入日期: Mar 2002 您的住址: 高雄市
文章: 279
|
好難
就跟要我解釋 [怎麼騎腳踏車] 一樣 我只會用...
__________________
在正確的時間, 正確的地點, 做正確的事 |
|
|
|
*停權中*
加入日期: Jun 2002
文章: 2,594
|
從你提的三個問題
看來你對指標還有不了解的 也對一些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 是什麼 只要排出他們的大小就好了 |
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Aug 2002 您的住址: 「天龍國」
文章: 795
|
c b a
1234567890
__________________
「千金難買早知道,萬般無奈想不到。」 |
|
|
|
Power Member
![]() ![]() 加入日期: May 2002
文章: 560
|
你是在龍門補資節的嗎??
(我覺得老師都把簡單的東西複雜化,像這個東西沒必要用到雙指標ㄟ) 你用dev c++自己把code執行一遍,就會了解了!! 而 temp=(struct stackekement *)malloc(size(struct stackekement)); 這行可換成 temp=new stackekement; (c++語法,簡單,明瞭多了) 引用:
|
|
|
|
|
*停權中*
加入日期: Oct 2001 您的住址: 鬼島-高譚市
文章: 5,987
|
引用:
a,b,c相等對不對? 如果沒有: int a=sizeof(temp_c); int b=sizeof(temp_i); int c=sizeof(temp_l); 這些的話應該是: l >= i > c 對不對 ![]() |
|
|
|
|
Basic Member
加入日期: Jul 2005
文章: 11
|
基本上這只是一個[傳址](call by reference)的示範而已,
也就是利用指標傳值, 利用指標傳值可以回傳多個值, 而一班[傳值](call by value)只能回傳一個值; 這個範例只在說明指標在函式的利用方式而已. |
|
|
|
*停權中*
加入日期: Jun 2002
文章: 2,594
|
引用:
對 就是相等, a=b=c 因為都只是一個 address 的大小 ![]() 不會因為指向哪一種 type, 而改變大小 |
|
|
|