PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
53346
*停權中*
 
53346的大頭照
 

加入日期: 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的東西...)
裝那東西要花錢買嗎?初學者夠用裝哪套好
先謝謝熱心為小弟解惑的前輩了,如可圖解小弟會更感激
     
      
舊 2005-07-20, 10:54 PM #1
回應時引用此文章
53346離線中  
8:5
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...。
 
舊 2005-07-21, 02:51 AM #2
回應時引用此文章
8:5離線中  
rexchiang
Advance Member
 

加入日期: Nov 2004
您的住址: 陸地上..
文章: 439
http://www.bloodshed.net/dev/devcpp.html
Dev-C++ 免費 又好用的 C/C++ 開發軟體

這一段 主要是老師要說明 利用 Link List 實做出 STACK
之前應該有實做過利用 Array 做成的 STACK吧
__________________

---------------------------------------------------
是穿腸毒藥,是刮骨鋼刀,如下山猛虎,是無煙火砲。

不成筵席,無世間人稀,無誰肯早起,無反被人欺。
舊 2005-07-21, 03:03 PM #3
回應時引用此文章
rexchiang離線中  
wangks
Major Member
 
wangks的大頭照
 

加入日期: Mar 2002
您的住址: 高雄市
文章: 279
好難
就跟要我解釋 [怎麼騎腳踏車] 一樣

我只會用...
__________________
在正確的時間, 正確的地點, 做正確的事
舊 2005-07-21, 04:22 PM #4
回應時引用此文章
wangks離線中  
rhapsody
*停權中*
 
rhapsody的大頭照
 

加入日期: 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 是什麼
只要排出他們的大小就好了
舊 2005-07-21, 08:56 PM #5
回應時引用此文章
rhapsody離線中  
ahdeng
Junior Member
 
ahdeng的大頭照
 

加入日期: Aug 2002
您的住址: 「天龍國」
文章: 795
c b a
1234567890
__________________
「千金難買早知道,萬般無奈想不到。」
舊 2005-07-21, 11:02 PM #6
回應時引用此文章
ahdeng離線中  
superintel
Power Member
 

加入日期: May 2002
文章: 560
Cool

你是在龍門補資節的嗎??
(我覺得老師都把簡單的東西複雜化,像這個東西沒必要用到雙指標ㄟ)
你用dev c++自己把code執行一遍,就會了解了!!
而 temp=(struct stackekement *)malloc(size(struct stackekement));
這行可換成
temp=new stackekement; (c++語法,簡單,明瞭多了)



引用:
作者53346
老師說以下這個程式你真的能夠了解,那指標的部分你就沒問題了,想忘也會忘不掉...
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*st...
舊 2005-07-21, 11:12 PM #7
回應時引用此文章
superintel離線中  
53346
*停權中*
 
53346的大頭照
 

加入日期: Oct 2001
您的住址: 鬼島-高譚市
文章: 5,987
引用:
作者rhapsody
從你提的三個問題
看來你對指標還有不了解的
也對一些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 是什麼
只要排出他們的大小就好了



a,b,c相等對不對?
如果沒有:
int a=sizeof(temp_c);
int b=sizeof(temp_i);
int c=sizeof(temp_l);
這些的話應該是:
l >= i > c 對不對
舊 2005-07-22, 12:46 AM #8
回應時引用此文章
53346離線中  
nbrenhu
Basic Member
 

加入日期: Jul 2005
文章: 11
基本上這只是一個[傳址](call by reference)的示範而已,
也就是利用指標傳值, 利用指標傳值可以回傳多個值,
而一班[傳值](call by value)只能回傳一個值;
這個範例只在說明指標在函式的利用方式而已.
舊 2005-07-22, 10:09 AM #9
回應時引用此文章
nbrenhu離線中  
rhapsody
*停權中*
 
rhapsody的大頭照
 

加入日期: Jun 2002
文章: 2,594
引用:
作者53346
a,b,c相等對不對?
如果沒有:
int a=sizeof(temp_c);
int b=sizeof(temp_i);
int c=sizeof(temp_l);
這些的話應該是:
l >= i > c 對不對




就是相等, a=b=c
因為都只是一個 address 的大小
不會因為指向哪一種 type, 而改變大小
舊 2005-07-22, 10:20 AM #10
回應時引用此文章
rhapsody離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是02:21 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。