ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingรบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ
หน้า: [1] 2   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: รบกวนพี่ๆช่วยติว ภาษาซีให้ทีครับ  (อ่าน 4079 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
*~เก้าคุง~*
สายตรวจเสียวบอร์ด
Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 136
ออฟไลน์ ออฟไลน์

กระทู้: 4,097



ดูรายละเอียด
« เมื่อ: 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 ใช่หรือป่าวครับ
}
บันทึกการเข้า
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=&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
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 20 มกราคม 2009, 22:16:10 »

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

พลังน้ำใจ: 131
ออฟไลน์ ออฟไลน์

กระทู้: 3,676



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 20 มกราคม 2009, 22:34:26 »

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

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

อืม มี่ก้อไม่รู้แฮะ เรียนมาปุ๊บก้อคืนอาจานปั๊บเลย โหะๆ
บันทึกการเข้า
หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 131
ออฟไลน์ ออฟไลน์

กระทู้: 3,676



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 20 มกราคม 2009, 22:53:18 »

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

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

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


แบบว่ามี่เข้าใจว่า

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=&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=&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 ค่ะ
บันทึกการเข้า
*~เก้าคุง~*
สายตรวจเสียวบอร์ด
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; // เป็นการให้ค่า ที่อยู่ของ ตัวแปร 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=&num;   กำหนดค่า  address  แรกของตัวแปร  num  ไปเก็บไว้ที่พอยน์เตอร์ pt_num

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



ถูกป่ะ ถ้าผิด มาบอกด้วยนะ มี่จาได้ไปคิดอีก แหะๆ ไม่ได้จับมาเป็นชาติแระภาษาซี จะได้ทบทวนไปด้วย เง้อ
บันทึกการเข้า
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=&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 อีก

 Cry
บันทึกการเข้า
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 »

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

อ้างถึง
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 »

มาดูเทพคุยกัน ผมงงไปหมดเลย  Huh?
บันทึกการเข้า

หมวยแว๊น
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 131
ออฟไลน์ ออฟไลน์

กระทู้: 3,676



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 21 มกราคม 2009, 15:13:19 »

มาดูเทพคุยกัน ผมงงไปหมดเลย  Huh?

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

บันทึกการเข้า
หน้า: [1] 2   ขึ้นบน
พิมพ์