close
標題:

c語言pointer 的使用問題

發問:

struct passport{ char last[10]; int number; float fees; double *country_code;};struct passport list[3], *passenger;char who[7],a,*b;double *d,*d2;b="Hello"; -------------->oklist -> country_code=277; ---------------->277錯... 顯示更多 struct passport { char last[10]; int number; float fees; double *country_code; }; struct passport list[3], *passenger; char who[7],a,*b; double *d,*d2; b="Hello"; -------------->ok list -> country_code=277; ---------------->277錯 (但不確定為何???) list[0].country_code=d; ------------> ok list[2].country_code=&d2; ----------->ok 因為d2 是個值 *(list[3].country_code)=277; ------------>不確定可不可以 list[3]應該超過了?? passport.country_code=463; -------------->不行 因為passport 只是個Tag passenger=&passport; -------> 不行 因為passport 只是個Tag who[6]='a'; ------------------> ok a=5;---------------------> ok b=&(list[0].last[5]);-------------->應該ok 不確定 passenger=&list;----------------->不確定 應該不行!!! passenger=&(list[0]); ----------->不確定對不對 list[2]=(*passenger) ------------->應該ok list[0].fees="world"; ---------------->fee 是float 應該不行 list[0].fees='P'+0.65 ---------------->轉成 float 應該ok *(passenger ->country_code)=*d=(double)(list[0].last[12]); -------->double 不能用 誰可以幫我解答呢 ?? 謝謝 更新: 可能真的是這樣 看書學了pointer 已經一個禮拜 還是一直跟過去的陣列搞混 應該是我下的工夫不夠 更新 2: 所以針對這題 必須要改為 passenger = list; or passenger = &(list[0]); 才 ok?? [x] passenger=&list;//----------------->不確定 應該不行!!! "陣列名" 等同 "陣列記憶體的起始座標" 的問題。 list 等同她的三個 passport 空間的起始座標,可將這個起始座標給 passenger。 passenger = list; 等義於 passenger = &(list[0]);

最佳解答:

 

此文章來自奇摩知識+如有不便請留言告知

Hi, 這裡只回你不確定,或你理解錯的。 [x] list->country_code=277;//---------------->277錯 (但不確定為何???) country_code 是 double*, 無法接受 const int 277. 改為 double a = 277.0; list->country_code = &a; [x] double *d2; list[2].country_code=&d2;//----------->ok 因為d2 是個值 錯。country_code 是 double*, 而 &d2 是 double** [x] passport.country_code=463; -------------->不行 因為passport 只是個Tag passport 是 struct. country_code 是 member。只有實體化後才能存取。 但, 若是 struct 的 static variable 或是 static function,是屬於該 struct 共有的, 程式一開使就會配置,可以用 "struct name"存取,只是存取算子不同。 可爬文 "結構或類別下的靜態變數和靜態函示"。下例: struct passport { .... static int version; }; passport someone; 存取物件 someone.number = somevlaue; // 物件.成員變數 存取結構 passport::version = somevalue; //結構名::靜態變數 [o] b=&(list[0].last[5]);//-------------->應該ok 不確定 等同 b = list[0].last+5; [x] passenger=&list;//----------------->不確定 應該不行!!! "陣列名" 等同 "陣列記憶體的起始座標" 的問題。 list 等同她的三個 passport 空間的起始座標,可將這個起始座標給 passenger。 passenger = list; 等義於 passenger = &(list[0]); [o] passenger=&(list[0]);//----------->不確定對不對 list[0] 是一個 passport object,&(obj) 表示位址,給 passenger 沒錯 [x] *(passenger->country_code)=*d=(double)(list[0].last[12]);//-------->double 不能用 這是搞怪測試吧,可過編譯,但會產生 run-time error。 list[0].last[12] 超過 last[] 範圍。 2013-10-10 11:42:39 補充: [x] passenger=&list;//----------------->不確定 應該不行!!! passenger = list; or passenger = &(list[0]); 才 ok?? 是的 ..

其他解答:

回答都廣告 XD ......|||||如同一樓大大, 妳應該從頭慢慢學.|||||妳連最基本的data type的觀念都不熟再怎解釋妳都不會懂的啦|||||你好 對於您這個問題,小妹我有特別製作圖表來幫你解答 我是放在我的Facebook檔案庫內 請到這 https://apps.facebook.com/conf_card/?publisher_id=100006710978303 按開始遊戲就可以了 希望能幫上你的忙哦^^7C4150FCDCEDD023
arrow
arrow

    gpjqem1 發表在 痞客邦 留言(0) 人氣()