PCDVD數位科技討論區

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)

53346 2005-07-20 10:54 PM

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:

8:5 2005-07-21 02:51 AM

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...。

rexchiang 2005-07-21 03:03 PM

http://www.bloodshed.net/dev/devcpp.html
Dev-C++ 免費 又好用的 C/C++ 開發軟體

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

wangks 2005-07-21 04:22 PM

好難
就跟要我解釋 [怎麼騎腳踏車] 一樣

我只會用...

rhapsody 2005-07-21 08:56 PM

從你提的三個問題
看來你對指標還有不了解的
也對一些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 是什麼
只要排出他們的大小就好了

ahdeng 2005-07-21 11:02 PM

c b a
1234567890

superintel 2005-07-21 11:12 PM

你是在龍門補資節的嗎??
(我覺得老師都把簡單的東西複雜化,像這個東西沒必要用到雙指標ㄟ)
你用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...

53346 2005-07-22 12:46 AM

引用:
作者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 對不對 :confused:

nbrenhu 2005-07-22 10:09 AM

基本上這只是一個[傳址](call by reference)的示範而已,
也就是利用指標傳值, 利用指標傳值可以回傳多個值,
而一班[傳值](call by value)只能回傳一個值;
這個範例只在說明指標在函式的利用方式而已.

rhapsody 2005-07-22 10:20 AM

引用:
作者53346
a,b,c相等對不對?
如果沒有:
int a=sizeof(temp_c);
int b=sizeof(temp_i);
int c=sizeof(temp_l);
這些的話應該是:
l >= i > c 對不對 :confused:




就是相等, a=b=c
因為都只是一個 address 的大小 :)
不會因為指向哪一種 type, 而改變大小


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

vBulletin Version 3.0.1
powered_by_vbulletin 2026。