全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5155
推到 Plurk!
推到 Facebook!

void指標問題

尚未結案
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-28 04:24:30 IP:59.104.xxx.xxx 未訂閱
#include 
#include     int main(int argc, char *argv[])
{
    
    void *p = (void*)100;    
    int i = (int)p; 
    printf("%d",i);        system("PAUSE");
    return 0;    }
1.指標右邊不是指向某個變數的記憶體位址(void*)100; //100是常數嗎?還是位址??為什麼可以void *p = (void*)100; 2.int i = (int)p; p不是指標變數為什麼再(int)p後可以給i值??這樣感覺是把位址給i 怪怪的 3.int i = (int)p;// p 不是void指標變數 p 應該存放記憶體位址 ; 那(int)p 轉型是在轉換"變數型態"還是"指標型態" 位址不是(int*)p; 嗎?? 4.以上面程式碼來說(int)p; ,(void*)100; 各代表什麼意思 謝謝 發表人 - syao 於 2005/11/28 04:45:43 發表人 - syao 於 2005/11/28 04:59:38
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-28 14:47:08 IP:211.22.xxx.xxx 未訂閱
#include 
#include     int main(int argc, char *argv[])
{
 void *p = (void*)100;    //宣告一個未定型態的指標p,並令指標直接指向0x0000064也就是記憶體空間100位址的地方,指標指向位址,對吧!
 int i = (int)p; //將P的位址位移量轉型為整數,其實這樣轉型很危險會溢位,還好本例沒有,因此>    -----------------------

        
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-28 16:44:33 IP:59.104.xxx.xxx 未訂閱
#include
#include
int main(){    pthread_create(&tid1, NULL, odd_even, (void*)5);    }
void *odd_even(void *param){
    
    int i = (int)param;    }    
我這問題是從這上面是片段程式碼看到的 pthread_create(&tid1, NULL, odd_even, (void*)5); //這參數可以解釋一下嗎??為什麼最後一個參數要(void*) (void*)5 參數把值傳遞給 void *odd_even(void *param) 相當於 (void *param) = (void*)5;是這樣嗎?? 之後再將 int i = (int)param; //這做法感覺怪怪的 param不是位址???這樣是把位址轉成(int)型態看起來覺得很怪,還是這程式碼不是這樣的是我想錯?? 還是pthread_create(); //最後的參數只能使用(void*)傳值嗎??? 謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-28 17:20:34 IP:211.22.xxx.xxx 未訂閱
#include
#include    void *odd_even(void *param)
{
 int i = (int)param; //param應該是XXXXXXXX:00000005,也就是5這個位址位移,前面XXXXXXX是目前程式端的分區(Segment:offset),分區每人在跑的電腦上不同,至於參數為何要這樣傳,為何要取位移5上的位址值,你自己要看程式才知道
}    int main()
{
pthread_create(&tid1, NULL, odd_even((void*)5));//應該是這樣吧!
}
----------------------- Practice makes perfect.
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-29 06:33:16 IP:203.70.xxx.xxx 未訂閱
#include 
#include 
void test1(void*);    int main(int argc, char *argv[])
{
    double i = 50.55;
    double *p = &i;    
    test1((void*)p);             system("PAUSE");
    return 0;    }
void test1(void* p){      
double *pp = (double*)p;    
printf("%6.2f\n",*pp);
     
}    
我了解我的問題不過我表答能力真的不好@@~~ 我其實是想把在main()指標指向變數, 再經由函式參數中使用(void*)轉型後帶到被呼叫的函式內 再由轉型轉回main()所指向的變數型態取用裡面的值 ^^ 謝謝 發表人 - syao 於 2005/11/29 06:34:57
系統時間:2024-04-23 16:15:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!