*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
   
พลังน้ำใจ: 136
ออฟไลน์
กระทู้: 4,097
|
 |
« เมื่อ: 20 มกราคม 2009, 19:21:03 » |
|
คือว่าผมเรียนเรื่องพอยน์เตอร์อยู่ครับ มึนกับชีสอาจารย์มากๆเลยมาดูโค้ดกันดีกว่า คือว่าผมไม่เข้าใจว่า คำสั่งไหนใช้แสดงอะไร ใช้แสดง address ของตัวแปรที่ชี้ไป หรือตัวพอยน์เตอร์เองอ่ะครับ
#include<stdio.h> main() { int num=100; int *pt_num;
pt_num=# printf("%d",pt_num); <<<< ค่าที่แสดงออกมาคืออะไรครับ address ของตัวแปร num หรือป่าว? printf("%p",pt_num); <<<< มันจะแสดง address ของ pt_test หรือตัวแปร num ครับ printf("%p",num); <<<< คำสั่งนี้ใช้แสดง address ของ num ใช่หรือป่าวครับ }
|
|
|
บันทึกการเข้า
|
|
|
|
NwnonT
สมุนแก๊งเสียว
พลังน้ำใจ: 39
ออฟไลน์
กระทู้: 634
|
 |
« ตอบ #1 เมื่อ: 20 มกราคม 2009, 21:10:08 » |
|
ไม่ค่อยแน่ใจนะครับ ผมก็เพิ่งปี 1 เอง
บรรทัดแรกจะแสดงค่า address ของ num ครับ ออกมาในรูปเลขฐาน 10 เพราะ %d มันจะแสดงออกมาในรูปฐาน 10 ครับ
บรรทัดที่สองจะแสดงค่า address ของ num ครับ แต่จะออกมาในรูปเลขฐาน 16
บรรทัดที่สาม num ไม่ใช่ตัวแปร pointer เราจะเอามาใช้ไม่ได้ครับ แต่มันจะคอมไพล์ผ่าน แต่ที่ออกมาคือค่าของ num ในรูปของเลขฐาน 16 แทน
ยังงัยรอท่านอื่นมาตรวจครับ
|
|
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #2 เมื่อ: 20 มกราคม 2009, 21:23:26 » |
|
*pt_num=#
printf("%d",pt_num); 100
printf("%p",pt_num) น่าจะ add จ๊ะ
printf("%p",num); ไม่รู้ว่าใช้ %p ได้ป่าว เพราะ มันไม่ใช่ pointer เห็นกำหนดมัน ไม่มี *
pt_num=# ทำไมไม่ใส่ *pt_num=# อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ
ไม่รู้นะ อยากรู้ ลองรันดู เก้าเอ้ย จุ๊บๆ มี่ก้อเรียนซียังไม่ผ่านเลย 555+
|
|
|
บันทึกการเข้า
|
|
|
|
ohmohm
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 170
ออฟไลน์
กระทู้: 3,098
|
 |
« ตอบ #3 เมื่อ: 20 มกราคม 2009, 22:16:10 » |
|
ทำไมไม่ใส่ *pt_num=# อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num
|
|
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #4 เมื่อ: 20 มกราคม 2009, 22:34:26 » |
|
ทำไมไม่ใส่ *pt_num=# อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num ป่าว หมายถึง ทำไมไม่ใส่ * ข้างหน้า pt_num ในตัวอย่างที่เก้าจังให้มาเห็นไม่ใส่ เลยสงสัย ตกลงว่าไม่ต้องใส่เหรอ  อืม มี่ก้อไม่รู้แฮะ เรียนมาปุ๊บก้อคืนอาจานปั๊บเลย โหะๆ
|
|
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #5 เมื่อ: 20 มกราคม 2009, 22:53:18 » |
|
ทำไมไม่ใส่ *pt_num=# อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num ป่าว หมายถึง ทำไมไม่ใส่ * ข้างหน้า pt_num ในตัวอย่างที่เก้าจังให้มาเห็นไม่ใส่ เลยสงสัย ตกลงว่าไม่ต้องใส่เหรอ  อืม มี่ก้อไม่รู้แฮะ เรียนมาปุ๊บก้อคืนอาจานปั๊บเลย โหะๆ แบบว่ามี่เข้าใจว่า printf("%d",pt_num) อันนี้มันก็จะเอาค่า pt_num มาแสดง เป็น int ส่วน %p อ่ะ มะเคยใช้มี่เลยดำน้ำ + ลองถามเพื่อนดู เค้าก้อว่าน่าจาแสดง ที่อยู่ของตัวแปรที่กำหนดที่อยู่ข้างหลังนั่นน่ะ ก้อเลยเดาว่า printf("%p",pt_num) ถ้าเขียนอย่างที่เขียนมาอ่ะ มันจะแสดงค่า ของ pt_num เพราะงั้นก็น่าแสดงจะ adddress ของ pt_num printf("%p",num); นี่ก้อน่าจะใช้แสดง address ของ num แต่เห็น เก้าไม่ใส่ * ข้างหน้าตัวแปรที่กำหนดให้เป็นพ้อยเตอร์ เลยสงสัยว่ามันจะรันผ่านนิ ถ้าใส่ * อ่ะ ตัวแปรที่อยู่หลังสัญลักษณ์ * จะเป็นตัวแปรชนิด พอยน์เตอร์ แต่ถ้าไม่มี * มันก็แค่ตัวแปร int ธรรมดาไม่ใช่เหรอ หรือไงอ่ะ อธิบายมี่หน่อยนะ มี่เริ่มสับสนกับตัวเองละ
|
|
|
บันทึกการเข้า
|
|
|
|
kkusd
Verified Seller
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 311
ออฟไลน์
กระทู้: 4,663
|
 |
« ตอบ #6 เมื่อ: 20 มกราคม 2009, 23:03:33 » |
|
#include<stdio.h> main() { int num=100; กำหนด num=100 เป็นแบบ interger int *pt_num; กำหนด pt_num เป็น interger (*ไม่แน่ใจว่าทำอะไร)(ที่ผมคิดไว้บรรทัดนี้น่าจะเป็น int pt_num;)
pt_num=# ให้ pt_num=num <== ตัวนี้จะเป็นตัวเก็บพอยเตอร์ printf("%d",pt_num); <<<< แสดงค่าของ pt_num ในรูปแบบของ %d printf("%p",pt_num); <<<< แสดงค่าของ pt_num ในรูปแบบของ %p printf("%p",num); <<<< แสดงค่าของ num ในรูปแบบของ %p
พวก %d,%p ผมจำไม่ได้แล้วว่าแสดงเป็นจำนวนเต็มหรือทศนิยมกันแน่ดูเองนะ
ปล.ถ้าเปลี่ยนวิธีเขียนได้ใช้ พวก cin กับ cout (อ่าน ซีอิน ซีเอาท์) ดีกว่าการแสดงผลไม่ต้องใช้พวก %d
|
|
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #7 เมื่อ: 20 มกราคม 2009, 23:08:35 » |
|
#include<stdio.h> main() { int num=100; กำหนด num=100 เป็นแบบ interger int *pt_num; กำหนด pt_num เป็น interger (*ไม่แน่ใจว่าทำอะไร)(ที่ผมคิดไว้บรรทัดนี้น่าจะเป็น int pt_num;)
pt_num=# ให้ pt_num=num <== ตัวนี้จะเป็นตัวเก็บพอยเตอร์ printf("%d",pt_num); <<<< แสดงค่าของ pt_num ในรูปแบบของ %d printf("%p",pt_num); <<<< แสดงค่าของ pt_num ในรูปแบบของ %p printf("%p",num); <<<< แสดงค่าของ num ในรูปแบบของ %p
พวก %d,%p ผมจำไม่ได้แล้วว่าแสดงเป็นจำนวนเต็มหรือทศนิยมกันแน่ดูเองนะ
ปล.ถ้าเปลี่ยนวิธีเขียนได้ใช้ พวก cin กับ cout (อ่าน ซีอิน ซีเอาท์) ดีกว่าการแสดงผลไม่ต้องใช้พวก %d
pt_num มันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &numกำลัง งง ว่า pt_num มานจาเปนพ้อยเตอร์ได้ไง ถ้าไม่มี * อยู่ข้างหน้า มานกะจะเป็นแค่ชื่อตัวแปรธรรมดา ที่เก็บค่าตามชนิดข้อมูลที่เรากำหนดง่ะ เข้าใจว่า *pt_num=# เนี่ย ไอ้ pt_num คือ ตัวแปรที่เป้นพอยน์เตอร์ ส่วน num คือ ชื่อตัวแปรที่ต้องการกำหนดค่า addressให้ ส่วน %d เก็บค่า int ค่ะ ในรูปจำนวนเต็ม ถ้าเป็นทศนิยม จะเป็น %f ค่ะ
|
|
|
บันทึกการเข้า
|
|
|
|
*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
   
พลังน้ำใจ: 136
ออฟไลน์
กระทู้: 4,097
|
 |
« ตอบ #8 เมื่อ: 20 มกราคม 2009, 23:13:59 » |
|
กำ ตกลงว่า printf("%p",pt_num);
มันแสดง address ของอะไรกันแน่ตัวที่มันชี้ หรือตัวมันเอง ผมล่ะงง -_-" ดันมี ๒ ความเห็นอีก
มี่ครับมันไม่ต้องใส่ * อยู่แล้วครับ เพราะว่าเราใส่ไว้ตอนกำหนดค่าตัวแปรแล้ว ว่ามันเป็นพอยเตอร์ไม่ใช่ตัวแปรธรรมดา ดังนั้นเวลาเอามาใช้มันจึงไม่ต้องใส่ดอกจัน
|
|
« แก้ไขครั้งสุดท้าย: 20 มกราคม 2009, 23:16:03 โดย *~เก้าคุง~* »
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #9 เมื่อ: 20 มกราคม 2009, 23:19:58 » |
|
กำ ตกลงว่า printf("%p",pt_num);
มันแสดง address ของอะไรกันแน่ตัวที่มันชี้ หรือตัวมันเอง ผมล่ะงง -_-" ดันมี ๒ ความเห็นอีก
มี่ครับมันไม่ต้องใส่ * อยู่แล้วครับ เพราะว่าเราใส่ไว้ตอนกำหนดค่าตัวแปรแล้ว ว่ามันเป็นพอยเตอร์ไม่ใช่ตัวแปรธรรมดา ดังนั้นเวลาเอามาใช้มันจึงไม่ต้องใส่ดอกจัน
จุ๊บๆ ก้อแค่เนี๊ยแหละ ที่อยากได้ แหม๋ ให้รอซะนาน ว่าแต่ เก้า ทำไมได้มาเรียนซีล่ะ - -*
|
|
|
บันทึกการเข้า
|
|
|
|
Rapture
สมุนแก๊งเสียว
พลังน้ำใจ: 116
ออฟไลน์
กระทู้: 639
|
 |
« ตอบ #10 เมื่อ: 20 มกราคม 2009, 23:30:49 » |
|
#include<stdio.h> main() { int num=100; int *pt_num; // เป็นการกำหนดว่าตัวแปร pt_num เป็น pointer ชนิดข้อมูลแบบ int
pt_num=# // เป็นการให้ค่า ที่อยู่ของ ตัวแปร num ให้กับ ตัวแปร pt_num printf("%d",pt_num); // ค่าที่ได้เป็นค่าเดียวกับ num คือ 100ค่าที่ได้คือ address ของ num ในการแสดงผลออกมาในรูปจำนวนเต็ม printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num printf("%p",num); // ค่าที่ได้เป็น address ของ ตัวแปร num เช่นกัน <== ตรงนี้ไม่แน่ใจนะ }
|
|
« แก้ไขครั้งสุดท้าย: 21 มกราคม 2009, 17:28:11 โดย Rapture »
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #11 เมื่อ: 20 มกราคม 2009, 23:58:35 » |
|
pt_num=# กำหนดค่า address แรกของตัวแปร num ไปเก็บไว้ที่พอยน์เตอร์ pt_num เพราะงั้น ไอ้ printf("%p",pt_num); ก้อต้อง แสดงค่า address ของตัวแปร num มั้งนะ  ถูกป่ะ ถ้าผิด มาบอกด้วยนะ มี่จาได้ไปคิดอีก แหะๆ ไม่ได้จับมาเป็นชาติแระภาษาซี จะได้ทบทวนไปด้วย เง้อ
|
|
|
บันทึกการเข้า
|
|
|
|
ITAXIz
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 41
ออฟไลน์
กระทู้: 1,439
|
 |
« ตอบ #12 เมื่อ: 21 มกราคม 2009, 00:09:56 » |
|
printf("%d",*pt_num); อันนี้ได้ 100 นะครับ (มาทำให้งงเข้าไปอีก 555+) กะลังเรียน พ้อยเตอร์เหมือนกาน งง ดี ทำไมไม่ใช้ คอมไพล์ รันเองเรยอ่ะ จาก #include<stdio.h> main() { int num=100; int *pt_num;
pt_num=# printf("%d",pt_num); <<<< ค่าที่แสดงออกมาคืออะไรครับ address ของตัวแปร num หรือป่าว? printf("%p",pt_num); <<<< มันจะแสดง address ของ pt_test หรือตัวแปร num ครับ printf("%p",num); <<<< คำสั่งนี้ใช้แสดง address ของ num ใช่หรือป่าวครับ } ก็เป็น printf("%d %p,num,num); printf("%d %p,&num,&num); << ให้ค่า address ของ num ออกมา(%p แตกต่างกับ %x นิดเดียวตรงเลข 00 ข้างหน้า(อันไหนซักอันเนี่ยแหละ)) printf("%d %p,pt_num,pt_num); printf("%d %p,*pt_num,*pt_num); ไม่รู้นะ เวลาผมอยกรู้อะไร ก้ รันๆๆๆ มันไปเรย 555+ ตอนนี้ กะลัง งง ว่า เอา พ้อยตเอร์มาทำไรหว่า ใช้งงก่า array อีก 
|
|
|
บันทึกการเข้า
|
|
|
|
ohmohm
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 170
ออฟไลน์
กระทู้: 3,098
|
 |
« ตอบ #13 เมื่อ: 21 มกราคม 2009, 00:55:45 » |
|
pt_num มานจาเปนพ้อยเตอร์ได้ไง ถ้าไม่มี * ความจริงมันมี * ครับ แต่อยู่ตรงที่ declare ( int * pt_num ) ไม่ได้เขียน C นานแล้วเหมือนกัน แต่เวลาเขียน สำำหรับเราเราจะมองว่า int และ pointer ใดใด ( รวมทั้งตัวครอบจักรวาล void * ) เป็นตัวแปรแบบ 32-bit อาจเก็บ value หรือ address ก็ได้ ทบทวนความรู้ http://home.netcom.com/~tjensen/ptr/pointers.htm 
|
|
|
บันทึกการเข้า
|
|
|
|
*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
   
พลังน้ำใจ: 136
ออฟไลน์
กระทู้: 4,097
|
 |
« ตอบ #14 เมื่อ: 21 มกราคม 2009, 01:12:01 » |
|
ถ้า printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num
แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ
|
|
|
บันทึกการเข้า
|
|
|
|
ohmohm
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 170
ออฟไลน์
กระทู้: 3,098
|
 |
« ตอบ #15 เมื่อ: 21 มกราคม 2009, 01:25:15 » |
|
ถ้า printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num
แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ
ไม่รู้จะผ่านหรือเปล่านะครับ &pt_num ต้องหา gcc มาลงมั่งแล้ว
|
|
|
บันทึกการเข้า
|
|
|
|
NwnonT
สมุนแก๊งเสียว
พลังน้ำใจ: 39
ออฟไลน์
กระทู้: 634
|
 |
« ตอบ #16 เมื่อ: 21 มกราคม 2009, 12:44:38 » |
|
ถ้า printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num
แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ
ไม่รู้จะผ่านหรือเปล่านะครับ &pt_num ต้องหา gcc มาลงมั่งแล้ว ถูกแล้วครับ ถ้าต้องการทราบแอดเดรสของตัวแปรก็เอาเครื่องหมาย & ไว้หน้าตัวแปร แล้วแสดงออกมา ไม่ว่าตัวแปรนั้นจะเป็น Pointer อาร์เรย์ หรือว่าตัวแปรธรรมดาก็ตาม
|
|
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #17 เมื่อ: 21 มกราคม 2009, 14:04:46 » |
|
วันหลัง มี่เอาการบ้านมาให้พี่ๆสอนมั่งนะ อิอิ  pt_num มานจาเปนพ้อยเตอร์ได้ไง ถ้าไม่มี * ความจริงมันมี * ครับ แต่อยู่ตรงที่ declare ( int * pt_num ) ไม่ได้เขียน C นานแล้วเหมือนกัน แต่เวลาเขียน สำำหรับเราเราจะมองว่า int และ pointer ใดใด ( รวมทั้งตัวครอบจักรวาล void * ) เป็นตัวแปรแบบ 32-bit อาจเก็บ value หรือ address ก็ได้ ทบทวนความรู้ http://home.netcom.com/~tjensen/ptr/pointers.htm  ขอบคุณมากค่ะ มี่ก้อไม่ได้จับภาษา c มานานแล้ว ก็ลืมไปเหมือนกัน เลยสับสนนิดๆว่าใช้ยังไง ขอบคุณมากสำหรับความรู้ค่ะ
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,518
|
 |
« ตอบ #18 เมื่อ: 21 มกราคม 2009, 14:32:43 » |
|
มาดูเทพคุยกัน ผมงงไปหมดเลย 
|
|
|
บันทึกการเข้า
|
|
|
|
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 131
ออฟไลน์
กระทู้: 3,676
|
 |
« ตอบ #19 เมื่อ: 21 มกราคม 2009, 15:13:19 » |
|
มาดูเทพคุยกัน ผมงงไปหมดเลย  โจเซฟิเน่ อย่ามาทำแอ๊บไม่รู้เรื่องนะ อย่าง EThaiZone เนี่ยนะจะไม่รู้เรื่อง
|
|
|
บันทึกการเข้า
|
|
|
|
|