รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ

เริ่มโดย *~เก้าคุง~*, 20 มกราคม 2009, 19:21:03

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

*~เก้าคุง~*

คือว่าผมเรียนเรื่องพอยน์เตอร์อยู่ครับ มึนกับชีสอาจารย์มากๆเลยมาดูโค้ดกันดีกว่า คือว่าผมไม่เข้าใจว่า คำสั่งไหนใช้แสดงอะไร ใช้แสดง address ของตัวแปรที่ชี้ไป หรือตัวพอยน์เตอร์เองอ่ะครับ

#include<stdio.h>
main()
{
int num=100;
int *pt_num;

pt_num=&num;
printf("%d",pt_num); <<<< ค่าที่แสดงออกมาคืออะไรครับ address ของตัวแปร num หรือป่าว?
printf("%p",pt_num); <<<< มันจะแสดง address ของ pt_test หรือตัวแปร num ครับ
printf("%p",num); <<<< คำสั่งนี้ใช้แสดง address ของ num ใช่หรือป่าวครับ
}

NwnonT

ไม่ค่อยแน่ใจนะครับ ผมก็เพิ่งปี 1 เอง

บรรทัดแรกจะแสดงค่า address ของ num ครับ ออกมาในรูปเลขฐาน 10 เพราะ %d  มันจะแสดงออกมาในรูปฐาน 10 ครับ

บรรทัดที่สองจะแสดงค่า address ของ num ครับ แต่จะออกมาในรูปเลขฐาน 16

บรรทัดที่สาม num ไม่ใช่ตัวแปร pointer เราจะเอามาใช้ไม่ได้ครับ แต่มันจะคอมไพล์ผ่าน แต่ที่ออกมาคือค่าของ num ในรูปของเลขฐาน 16 แทน

ยังงัยรอท่านอื่นมาตรวจครับ

หมวยแว๊น

*pt_num=&num;

printf("%d",pt_num);   100

printf("%p",pt_num) น่าจะ add จ๊ะ

printf("%p",num); ไม่รู้ว่าใช้ %p ได้ป่าว เพราะ มันไม่ใช่ pointer เห็นกำหนดมัน ไม่มี *

pt_num=&num;  ทำไมไม่ใส่ *pt_num=&num; อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ


ไม่รู้นะ อยากรู้ ลองรันดู เก้าเอ้ย จุ๊บๆ มี่ก้อเรียนซียังไม่ผ่านเลย 555+

ohmohm

อ้างถึงทำไมไม่ใส่ *pt_num=&num; อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ
pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num

หมวยแว๊น

อ้างถึงจาก: ohmohm ใน 20 มกราคม 2009, 22:16:10
อ้างถึงทำไมไม่ใส่ *pt_num=&num; อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ
pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num

ป่าว หมายถึง ทำไมไม่ใส่ * ข้างหน้า pt_num ในตัวอย่างที่เก้าจังให้มาเห็นไม่ใส่ เลยสงสัย ตกลงว่าไม่ต้องใส่เหรอ  ???

อืม มี่ก้อไม่รู้แฮะ เรียนมาปุ๊บก้อคืนอาจานปั๊บเลย โหะๆ

หมวยแว๊น

อ้างถึงจาก: หมวยแว๊น ใน 20 มกราคม 2009, 22:34:26
อ้างถึงจาก: ohmohm ใน 20 มกราคม 2009, 22:16:10
อ้างถึงทำไมไม่ใส่ *pt_num=&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

#include<stdio.h>
main()
{
int num=100; กำหนด num=100 เป็นแบบ interger
int *pt_num; กำหนด pt_num เป็น interger (*ไม่แน่ใจว่าทำอะไร)(ที่ผมคิดไว้บรรทัดนี้น่าจะเป็น int pt_num;)

pt_num=&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



หมวยแว๊น

อ้างถึงจาก: kkusd ใน 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=&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=&num;  เนี่ย  ไอ้ pt_num คือ ตัวแปรที่เป้นพอยน์เตอร์ ส่วน num คือ ชื่อตัวแปรที่ต้องการกำหนดค่า addressให้


ส่วน %d เก็บค่า int ค่ะ ในรูปจำนวนเต็ม   ถ้าเป็นทศนิยม จะเป็น %f ค่ะ

*~เก้าคุง~*

#8
กำ ตกลงว่า
printf("%p",pt_num);

มันแสดง address ของอะไรกันแน่ตัวที่มันชี้ หรือตัวมันเอง ผมล่ะงง -_-" ดันมี ๒ ความเห็นอีก

มี่ครับมันไม่ต้องใส่ * อยู่แล้วครับ เพราะว่าเราใส่ไว้ตอนกำหนดค่าตัวแปรแล้ว ว่ามันเป็นพอยเตอร์ไม่ใช่ตัวแปรธรรมดา ดังนั้นเวลาเอามาใช้มันจึงไม่ต้องใส่ดอกจัน

หมวยแว๊น

อ้างถึงจาก: *~เก้าคุง~* ใน 20 มกราคม 2009, 23:13:59
กำ ตกลงว่า
printf("%p",pt_num);

มันแสดง address ของอะไรกันแน่ตัวที่มันชี้ หรือตัวมันเอง ผมล่ะงง -_-" ดันมี ๒ ความเห็นอีก

มี่ครับมันไม่ต้องใส่ * อยู่แล้วครับ เพราะว่าเราใส่ไว้ตอนกำหนดค่าตัวแปรแล้ว ว่ามันเป็นพอยเตอร์ไม่ใช่ตัวแปรธรรมดา ดังนั้นเวลาเอามาใช้มันจึงไม่ต้องใส่ดอกจัน

จุ๊บๆ ก้อแค่เนี๊ยแหละ ที่อยากได้ แหม๋ ให้รอซะนาน ว่าแต่ เก้า ทำไมได้มาเรียนซีล่ะ - -*

Rapture

#10
#include<stdio.h>
main()
{
int num=100;
int *pt_num; // เป็นการกำหนดว่าตัวแปร pt_num เป็น pointer ชนิดข้อมูลแบบ int

pt_num=&num; // เป็นการให้ค่า ที่อยู่ของ ตัวแปร num ให้กับ ตัวแปร pt_num
printf("%d",pt_num); // ค่าที่ได้เป็นค่าเดียวกับ num คือ 100ค่าที่ได้คือ address ของ num ในการแสดงผลออกมาในรูปจำนวนเต็ม
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num
printf("%p",num); // ค่าที่ได้เป็น address ของ ตัวแปร num เช่นกัน <== ตรงนี้ไม่แน่ใจนะ
}

หมวยแว๊น

pt_num=&num;   กำหนดค่า  address  แรกของตัวแปร  num  ไปเก็บไว้ที่พอยน์เตอร์ pt_num

เพราะงั้น ไอ้ printf("%p",pt_num);  ก้อต้อง แสดงค่า address  ของตัวแปร  num   มั้งนะ   ???



ถูกป่ะ ถ้าผิด มาบอกด้วยนะ มี่จาได้ไปคิดอีก แหะๆ ไม่ได้จับมาเป็นชาติแระภาษาซี จะได้ทบทวนไปด้วย เง้อ

ITAXIz

printf("%d",*pt_num);

อันนี้ได้ 100 นะครับ (มาทำให้งงเข้าไปอีก 555+)

กะลังเรียน พ้อยเตอร์เหมือนกาน งง ดี

ทำไมไม่ใช้ คอมไพล์ รันเองเรยอ่ะ

จาก

#include<stdio.h>
main()
{
int num=100;
int *pt_num;

pt_num=&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

อ้างถึงpt_num มานจาเปนพ้อยเตอร์ได้ไง ถ้าไม่มี *
ความจริงมันมี * ครับ แต่อยู่ตรงที่ declare ( int * pt_num )

ไม่ได้เขียน C นานแล้วเหมือนกัน แต่เวลาเขียน สำำหรับเราเราจะมองว่า int และ pointer ใดใด ( รวมทั้งตัวครอบจักรวาล void * ) เป็นตัวแปรแบบ 32-bit อาจเก็บ value หรือ address ก็ได้

ทบทวนความรู้
http://home.netcom.com/~tjensen/ptr/pointers.htm

*~เก้าคุง~*

ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ

ohmohm

อ้างถึงจาก: *~เก้าคุง~* ใน 21 มกราคม 2009, 01:12:01
ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ
ไม่รู้จะผ่านหรือเปล่านะครับ &pt_num

ต้องหา gcc มาลงมั่งแล้ว

NwnonT

อ้างถึงจาก: ohmohm ใน 21 มกราคม 2009, 01:25:15
อ้างถึงจาก: *~เก้าคุง~* ใน 21 มกราคม 2009, 01:12:01
ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ
ไม่รู้จะผ่านหรือเปล่านะครับ &pt_num

ต้องหา gcc มาลงมั่งแล้ว

ถูกแล้วครับ ถ้าต้องการทราบแอดเดรสของตัวแปรก็เอาเครื่องหมาย & ไว้หน้าตัวแปร แล้วแสดงออกมา ไม่ว่าตัวแปรนั้นจะเป็น Pointer อาร์เรย์ หรือว่าตัวแปรธรรมดาก็ตาม

หมวยแว๊น

วันหลัง มี่เอาการบ้านมาให้พี่ๆสอนมั่งนะ อิอิ  :-[

อ้างถึงจาก: ohmohm ใน 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


ขอบคุณมากค่ะ มี่ก้อไม่ได้จับภาษา c มานานแล้ว ก็ลืมไปเหมือนกัน เลยสับสนนิดๆว่าใช้ยังไง ขอบคุณมากสำหรับความรู้ค่ะ

EThaiZone


หมวยแว๊น

อ้างถึงจาก: EThaiZone ใน 21 มกราคม 2009, 14:32:43
มาดูเทพคุยกัน ผมงงไปหมดเลย  ???

โจเซฟิเน่ อย่ามาทำแอ๊บไม่รู้เรื่องนะ อย่าง EThaiZone เนี่ยนะจะไม่รู้เรื่อง