ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => หัวข้อเริ่มโดย: *~เก้าคุง~* ใน 20 มกราคม 2009, 19:21:03

ชื่อเรื่อง: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: *~เก้าคุง~* ใน 20 มกราคม 2009, 19:21:03
คือว่าผมเรียนเรื่องพอยน์เตอร์อยู่ครับ มึนกับชีสอาจารย์มากๆเลยมาดูโค้ดกันดีกว่า คือว่าผมไม่เข้าใจว่า คำสั่งไหนใช้แสดงอะไร ใช้แสดง 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 ใช่หรือป่าวครับ
}
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: NwnonT ใน 20 มกราคม 2009, 21:10:08
ไม่ค่อยแน่ใจนะครับ ผมก็เพิ่งปี 1 เอง

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

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

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

ยังงัยรอท่านอื่นมาตรวจครับ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 20 มกราคม 2009, 21:23:26
*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+
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: ohmohm ใน 20 มกราคม 2009, 22:16:10
อ้างถึงทำไมไม่ใส่ *pt_num=&num; อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ
pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 20 มกราคม 2009, 22:34:26
อ้างถึงจาก: ohmohm ใน 20 มกราคม 2009, 22:16:10
อ้างถึงทำไมไม่ใส่ *pt_num=&num; อ่ะ pt_num เป้นพ้อยเตอร์ไม่ใช่นิ
pt_num มัันคือ pointer อยู่แล้วนะครับ ค่าที่จะใส่ให้มัน ควรเป็น address ซึ่งก็คือ &num

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

อืม มี่ก้อไม่รู้แฮะ เรียนมาปุ๊บก้อคืนอาจานปั๊บเลย โหะๆ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 20 มกราคม 2009, 22:53:18
อ้างถึงจาก: หมวยแว๊น ใน 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 ธรรมดาไม่ใช่เหรอ

หรือไงอ่ะ อธิบายมี่หน่อยนะ มี่เริ่มสับสนกับตัวเองละ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: 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


ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 20 มกราคม 2009, 23:08:35
อ้างถึงจาก: 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 ค่ะ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: *~เก้าคุง~* ใน 20 มกราคม 2009, 23:13:59
กำ ตกลงว่า
printf("%p",pt_num);

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

มี่ครับมันไม่ต้องใส่ * อยู่แล้วครับ เพราะว่าเราใส่ไว้ตอนกำหนดค่าตัวแปรแล้ว ว่ามันเป็นพอยเตอร์ไม่ใช่ตัวแปรธรรมดา ดังนั้นเวลาเอามาใช้มันจึงไม่ต้องใส่ดอกจัน
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 20 มกราคม 2009, 23:19:58
อ้างถึงจาก: *~เก้าคุง~* ใน 20 มกราคม 2009, 23:13:59
กำ ตกลงว่า
printf("%p",pt_num);

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

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

จุ๊บๆ ก้อแค่เนี๊ยแหละ ที่อยากได้ แหม๋ ให้รอซะนาน ว่าแต่ เก้า ทำไมได้มาเรียนซีล่ะ - -*
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Rapture ใน 20 มกราคม 2009, 23:30:49
#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 เช่นกัน <== ตรงนี้ไม่แน่ใจนะ
}
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 20 มกราคม 2009, 23:58:35
pt_num=&num;   กำหนดค่า  address  แรกของตัวแปร  num  ไปเก็บไว้ที่พอยน์เตอร์ pt_num

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



ถูกป่ะ ถ้าผิด มาบอกด้วยนะ มี่จาได้ไปคิดอีก แหะๆ ไม่ได้จับมาเป็นชาติแระภาษาซี จะได้ทบทวนไปด้วย เง้อ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: ITAXIz ใน 21 มกราคม 2009, 00:09:56
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 อีก

:'(
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: 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
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: *~เก้าคุง~* ใน 21 มกราคม 2009, 01:12:01
ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

แล้วถ้าอยากรู้ว่าaddress ของพอยเต้อเป็นอะไร จะต้องใช้คำสั่งอะไรเหรอครับ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: ohmohm ใน 21 มกราคม 2009, 01:25:15
อ้างถึงจาก: *~เก้าคุง~* ใน 21 มกราคม 2009, 01:12:01
ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

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

ต้องหา gcc มาลงมั่งแล้ว
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: NwnonT ใน 21 มกราคม 2009, 12:44:38
อ้างถึงจาก: ohmohm ใน 21 มกราคม 2009, 01:25:15
อ้างถึงจาก: *~เก้าคุง~* ใน 21 มกราคม 2009, 01:12:01
ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

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

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

ถูกแล้วครับ ถ้าต้องการทราบแอดเดรสของตัวแปรก็เอาเครื่องหมาย & ไว้หน้าตัวแปร แล้วแสดงออกมา ไม่ว่าตัวแปรนั้นจะเป็น Pointer อาร์เรย์ หรือว่าตัวแปรธรรมดาก็ตาม
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 21 มกราคม 2009, 14:04:46
วันหลัง มี่เอาการบ้านมาให้พี่ๆสอนมั่งนะ อิอิ  :-[

อ้างถึงจาก: 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 มานานแล้ว ก็ลืมไปเหมือนกัน เลยสับสนนิดๆว่าใช้ยังไง ขอบคุณมากสำหรับความรู้ค่ะ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: EThaiZone ใน 21 มกราคม 2009, 14:32:43
มาดูเทพคุยกัน ผมงงไปหมดเลย  ???
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: หมวยแว๊น ใน 21 มกราคม 2009, 15:13:19
อ้างถึงจาก: EThaiZone ใน 21 มกราคม 2009, 14:32:43
มาดูเทพคุยกัน ผมงงไปหมดเลย  ???

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

ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: elrarour ใน 21 มกราคม 2009, 15:57:33
มางงอีกคน  :P
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Rapture ใน 21 มกราคม 2009, 16:33:33
อ้างถึงจาก: NwnonT ใน 21 มกราคม 2009, 12:44:38
อ้างถึงจาก: ohmohm ใน 21 มกราคม 2009, 01:25:15
อ้างถึงจาก: *~เก้าคุง~* ใน 21 มกราคม 2009, 01:12:01
ถ้า
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num

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

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

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

ผมคิดว่า ตามข้างบนนะมั้ง
แต่ถ้าตามข้างบนผมก็ไม่รู้ว่าจะแสดงระหัสควบคุมการแสดงผลเป็นอะไรดี สงสัยว่าจะเป็น %x มั้ง หรือ %p
ซึ่งก็น่าจะได้ตามบรรทัดนี้ >> printf("%x",&pt_num); มั้ง
ส่วน %p เป็นการแสดงผลควบคุมของ pointer ผมไม่แน่ใจว่าถ้า printf("%p",num); แบบนี้จะได้หรือเปล่า
สรุปคือถ้าผมต้องการรู้ตำแหน่งของตัวแปร pt_num
ผมจะทำอย่างนี้
โดยใช้ Indirect pointer ซึี่งก็คือตัวแปร pointer ซ้อน pointer
รูปแบบคือ type **pointer;
โดย type ต้องเป็นชนิดเดียวกับตัวแปร pointer ที่ต้องการหาตำแหน่งที่อยู่ ในที่นี้คือ int
ผมจะเขียนโค้ดใหม่ว่า
#include<stdio.h>
main()
{
int num=100;
int *pt_num; // เป็นการกำหนดว่าตัวแปร pt_num เป็น pointer ชนิดข้อมูลแบบ int
int **ptt_num;//เป็นการกำหนดว่าตัวแปร ptt_num เป็น indirect pointer ชนิดข้อมูลแบบ int
pt_num=&num; // เป็นการให้ค่า ที่อยู่ของ ตัวแปร num ให้กับ ตัวแปร pt_num
ptt_num=&pt_num;// เป็นการให้ค่า ที่อยู่ของ ตัวแปร pt_num ให้กับ ตัวแปร ptt_num
printf("%d",pt_num); // ค่าที่ได้เป็นค่าเดียวกับ num คือ 100ค่าที่ได้คือ address ของ num ในการแสดงผลออกมาในรูปจำนวนเต็ม
printf("%p",pt_num); // ค่าที่ได้เป็น address ของ ตัวแปร num
printf("%p",ptt_num);// ค่าที่ได้เป็น address ของ ตัวแปร pt_num
printf("%p",num); // ค่าที่ได้เป็น address ของ ตัวแปร num เช่นกัน <== ตรงนี้ไม่แน่ใจนะ
}
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Hari Seldon ใน 21 มกราคม 2009, 16:58:43
เอ แปลกจัง

ผมลอง compile ด้วย gcc บน CentOS

ได้ผลลัพธ์แบบนี้อ่ะครับ

-1074891484
0xbfee7524
0x64
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Rapture ใน 21 มกราคม 2009, 17:17:20
อ้างถึงจาก: Hari Seldon ใน 21 มกราคม 2009, 16:58:43
เอ แปลกจัง

ผมลอง compile ด้วย gcc บน CentOS

ได้ผลลัพธ์แบบนี้อ่ะครับ

-1074891484
0xbfee7524
0x64

ผมว่าไม่แปลกหรอกเพราะพวกผมบอกกันผิดเอง
printf("%d",pt_num); // ค่าที่ได้เป็นค่าเดียวกับ num คือ 100คือ address ของ pt_num num ในการแสดงผลออกมาในรูปจำนวนเต็ม มันเลยแสดงออกมาเป็น -1074891484
ถ้าค่าจะเป็น 100 มันต้องมี *อยู่ด้วยคือ printf("%d",*pt_num);
;D เรื่องมันนานเลยลืม
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Hari Seldon ใน 21 มกราคม 2009, 17:31:40
อ้างถึงจาก: Rapture ใน 21 มกราคม 2009, 17:17:20
ถ้าค่าจะเป็น 100 มันต้องมี *อยู่ด้วยคือ printf("%d",*pt_num);

;D

ถ้างั้นก็ง่ายๆ ครับ เรื่อง pointer

โค้ด (c) เลือก
#include<stdio.h>
main()
{
int num=100;
int *pt_num;

pt_num=&num;
printf("*pt_num %d\n",*pt_num);
printf("pt_num  %p\n",pt_num);
printf("num     %p\n",num);
printf("&num    %p\n",&num);
printf("&pt_num %p\n",&pt_num);
}


ผลลัพธ์


*pt_num 100
pt_num  0xbfe9b844
num     0x64
&num    0xbfe9b844
&pt_num 0xbfe9b840


ถ้าเรา declare int *pt_num; มันจะเป็นตัวแปรที่เก็บ address ของ memory
คือ *pt_num จะเหมือนกับ num
และ &num จะเหมือนกับ pt_num

ส่วน %p ใน printf แค่พิมพ์เลขฐาน 16 ของค่าในตัวแปร
ดังนั้น printf("%d", num) ก็เท่ากับ 100 หรือ 0x64
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: NwnonT ใน 21 มกราคม 2009, 17:48:35
อ้างถึงดังนั้น printf("%d", num) ก็เท่ากับ 100 หรือ 0x64

มันต้องเท่ากับ 100 อย่างเดียวสิครับ %d มันใช้แสดงค่าของเลขฐาน 10 ครับ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Rapture ใน 21 มกราคม 2009, 17:57:29
 ;D ;D ขอสรุปอีกทีแล้วกัน เป็นการรวบรวมข้อมูลทั้งหมด

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

pt_num=&num;
printf("%d",pt_num); //ค่าที่ได้เป็นค่า address ของ num โดยแสดงออกมาในรูปแบบจำนวนเต็ม
printf("%p",pt_num); //ค่าที่ได้เป็นค่า address ของ num โดยแสดงออกมาในรูปแบบเลขฐาน 16
printf("%p",num); // ค่าที่ได้เป็นค่าของ num โดยแสดงออกมาในรูปแบบเลขฐาน 16 นั่นคือค่า 100 ในรูป 0x64
}
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: ohmohm ใน 21 มกราคม 2009, 18:41:04
อ้างถึงจาก: Hari Seldon ใน 21 มกราคม 2009, 16:58:43
เอ แปลกจัง

ผมลอง compile ด้วย gcc บน CentOS

ได้ผลลัพธ์แบบนี้อ่ะครับ

-1074891484
0xbfee7524
0x64


0xbfee7524 ก็คือ -1074891484 นั้นเอง ( 2's compliment )

พึ่งนึกได้ มี OpenBSD อยู่ใกล้ เดี๋ยวลองมั่งดีกว่า

[ตอบ] ได้แล้ว
-809658176
0xcfbd98c0
0x64
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: moneysever ใน 22 มกราคม 2009, 11:25:30
ประกาศค่า  num  เรียน  num มาใช้    ผมก็ไม่แน่ใจ 

มันมี  ตัวแปล อยุ่อัน  เอามาเพิ่ม ได้คับ

เดียวไว้จะลองไปเปิดหนังสือดูมาให้ครับ
ชื่อเรื่อง: Re: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
โพสต์โดย: Hari Seldon ใน 22 มกราคม 2009, 11:43:51
อ้างถึงจาก: NwnonT ใน 21 มกราคม 2009, 17:48:35
อ้างถึงดังนั้น printf("%d", num) ก็เท่ากับ 100 หรือ 0x64

มันต้องเท่ากับ 100 อย่างเดียวสิครับ %d มันใช้แสดงค่าของเลขฐาน 10 ครับ

อ่า ครับ ผมเขียนไม่ชัดเจน หมายถึงค่ามันเท่ากันครับ 0x64 คือฐานสิบหกของ 100 ฐานสิบ
คือมันจะแสดง 0x64 สำหรับ printf( "%p", num ); หรือ printf( "%p", *pt_num );