หน้าแรก
 การบ้าน
  C/C++ new
  Java new
 Sourcecode.TV
  Android
  Blackberry
  C/C++
  Java
  Linux
  Windows Phone
  แจ้งเรื่องที่ต้องการ
 บทความ
  .NET
  Android
  Blackberry
  C++Builder
  Delphi
  Java
  Mobile
  Open Source
  Pocket PC
  Visual Basic
  Web
  Windows Phone
  Others
 แบบเรียนฟรี
  ASP
  ASP.NET Webmatrix
  C++
  eVB
  J2ME
  Java
  PHP
 ซอร์สโค้ด
  Android
  ASP
  C++
  VC++
  CGI-Perl
  Delphi
  Java
  jQuery
  PHP
  Visual Basic
  .NET
 บริการจากเรา
  เปิดท้าย... ขายโค้ด
  DoodeeHosting
  รับออกแบบ พัฒนาเว็บไซต์
  Freeware
  อัตราค่าโฆษณา
  รายชื่อลูกค้า
  สถิติผู้เข้าเว็บ
 ดาว์นโหลด
 ค้นหาข้อมูล
 กระดานสนทนา
  .NET
  C/C++
  Delphi
  Java
  Palm/PocketPC
  Visual Basic
  Web
  อื่นๆ
 กระดานงาน
 ลิงค์เว็บ
 เกี่ยวกับผม
 อัตราค่าโฆษณา
Social Network

Facebook  Twitter  YouTube
 New Article
 Webboard
 Freelanceboard
Freeware
โปรแกรมเบอร์ดี (BerDee)
โปรแกรมเบอร์ดี (Android)
เกมส์เป่ายิ้งฉุบ
เกมส์เป่ายิ้งฉุบ(Android)
WebcamMonitor
WebcamMonitor(Windows)
scSendMail
scSendMail(Windows)
MSN Caption
MSN Caption(Windows)
  Freelance comment
  ติดต่อสอบถามมาได้ตลอดนะ...
2015-07-29 13:35:58
  ถ้าผมต้องการเว็บที่พัฒน...
2015-01-18 15:33:54
  ถ้าผมต้องการเว็บที่พัฒน...
2015-01-18 15:32:51
  ติดต่อสอบถามเข้ามาได้นะ...
2014-01-06 12:47:38
  ถ้ายังหาคนสอนไม่ได้ ก็ลอ...
2013-07-06 01:04:37
  สนใจส่งขอบเขตมาคุยราคาก...
2013-03-24 18:54:20
  ถ้ายังไม่มีคนรับงานติดต...
2012-12-16 19:18:14
  สนใจคะ ติดต่อ 0905076277...
2012-11-12 11:07:46
  รับทำโปรเจ็คนักศึกษาหรื...
2012-10-29 03:10:46
  sukit_te34@hotmail.com...
2012-10-29 03:09:36
  Webboard comment
  ผมทำคลิปสอนเขียน C# หาค่า BM...
2019-04-23 05:06:26
  ขอบคุณครับ โค้ดผิดตั้งแต...
2019-03-27 09:21:54
  ลองคิด และไล่ลำดับการทำง...
2018-12-04 02:17:48
  สอนทำโค้ดเกมจำคู่a-hหน่อย...
2018-11-06 12:20:06
  ศึกษาเรื่อง structure กับ array แล้...
2018-10-28 07:26:36
  แบบนี้หรือเปล่า https://www.youtube.com/...
2018-10-20 04:39:25
  ถาม คนที่สั่ง สิครับ ว่าต...
2018-04-23 00:42:14
  ผมลองทำดูเเล้ว ผมติดอยู่...
2018-02-25 18:56:56
  คุณจะเขียนการทำงานไว้ใน ...
2018-02-25 14:01:53
  งั้นขอถามหน่อยครับว่า จะ...
2018-02-25 12:53:34
  Homework comment
  ขอสอบถามการเขียน c++ ครับ เ...
2018-04-02 12:19:21
  โค้ดตัวอย่างศึกษาให้เข้...
2017-11-26 14:50:05
  คำนวณค่าน้ำโดยรับค่ามิเ...
2017-11-20 23:15:26
  ขอบคุณมากครับ...
2017-08-16 18:27:25
  ทำเอง งง เอง กะลังทำใหม่ค...
2017-04-18 18:40:46
  ทำเอง งง เอง กะลังทำใหม่ค...
2017-04-18 18:37:54
  ประเด็นแรก flowchart มันไม่มีภ...
2017-04-18 17:43:33
  อยากได้ flowchart ค่ะ เป็นภาษาว...
2017-04-18 16:25:29
  kungking คำถามคืออะไรครับ ?...
2017-03-18 23:28:36
  จงเขียนโปรแกรมแสดงผลรวม...
2017-03-06 10:56:25
  Article comment
  รบกวนขอสอบถามหน่อยนะครั...
2019-03-04 05:31:04
  สามารถนำตัวหนังสือจากภา...
2018-12-25 08:54:32
  มีcode ของ VB ไหมค่ะ ถ้ามีรบกว...
2017-09-28 16:50:02
  น่าจะได้ครับ ไม่เคยลอง
...

2017-07-11 09:59:35
  สามารถใช้ต่อกับ anycast ได้ไห...
2017-07-05 10:12:35
  ครับ คุณ "ติด" แล้วลองนึกต...
2016-06-18 15:21:09
  vs2008 c# ครับ ขอบคุณครับ...
2016-06-17 14:39:30
  ผมใช้ vs c# ทำตามทุขั้นตอนแต...
2016-06-17 14:37:44
  ต้องวิเคราะห์ครับ "ว่าจร...
2016-03-12 23:36:05
  ผมส่งข้อความในวง LAN ได้เฉ...
2016-03-12 18:25:42
  9Mcode comment
  อยากได้...
2014-02-21 08:52:19

Link Exchange

อัตราค่าโฆษณา
Statistics of Sourcecode in Thailand
 
 C++ Tutorial  

- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -

 C++
 
 

การใช้พอยต์เตอร์ และ Dynamic Allocation

 

ในบทนี้เราจะมาพูดถึงการใช้พอยต์เตอร์และ Dynamic Allocation กันครับ

   
 
#include <iostream.h>

int main()
{
int *pt1;
int *pt2;

int one=1;
int two=2;
	pt1=&one;
	*pt1=*pt1+two;

	*pt2=two;
	two=two+1;

	cout<<*pt1<<"\n";
	cout<<*pt2<<"\n";
	cout<<one<<" "<<two;
return 0; }
 
   

[Download Code]

การสร้างตัวแปรชนิดพอยต์เตอร์ก็คือการใช้เครื่องหมาย * นำหน้าชื่อตัวแปรครับ ในตัวอย่างเราได้สร้างพอยต์เตอร์ชนิด integer ขึ้นมา 2 ตัว และตัวแปรธรรมดาอีก 2 ตัวครับ จากนั้นเราก็ให้ที่อยู่ของ one แก่ pt1 โดยใช้เครื่องหมาย & ครับ จากนั้นเราก็บวกข้อมูลของพอยต์เตอร์ด้วย two อันนี้หมายความว่า พอยต์เตอร์เรานั้นชี้ไปที่ one ดังนั้น เมื่อบวกค่าของพอยต์เตอร์ด้วย two ค่าของ one ก็จะถูกบวกด้วยเหมือนกัน

จากนั้นเราก็ให้ pt2 ชี้ไปที่ค่าของ two ไม่เหมือนอันแรกนะครับ ดังนั้นถ้าเราเปลี่ยนค่าของ two พอยต์เตอร์จะไม่เปลี่ยนตามไปด้วย และเช่นเดียวกันถ้าเราเปลี่ยนค่าของ pt2 ค่าของ two ก็จะไม่เปลี่ยนตามไปด้วยครับ

   
 
#include <iostream.h>

int main()
{
int *pt1,*pt2;
int index=10;
pt1=&index; pt2=pt1; cout<<index<<" "<<*pt1<<" "<<*pt2; return 0; }
 
   

[Download Code]

ตัวอย่างนี้ก็แสดงวิธีการใหค่าพอยต์เตอร์แก่พอยต์เตอร์เท่านั้นเองครับ

การให้ฟังก์ชั่นเปลี่ยนค่าและส่งค่ากลับ

จากที่ผมเคยอธิบายในเรื่องค่าที่เราส่งไปให้ฟังก์ชั่นนั้นเป็นเพียงค่าก็อปปี้ ไม่ว่าเราจะไปเปลี่ยนค่ามันอย่างไร เมื่อกลับมาในส่วนของเมนค่ามันก็ยังเท่าเดิม แต่ถ้าเราต้องการให้ค่าที่ส่งมาเปลี่ยนไปด้วย เราก็จะต้องใช้พอยต์เตอร์นี่ล่ะครับช่วย

   
 
#include <iostream.h>

void set(int height,int *lenght);


int main()
{
int h=170;
int l=60;

	cout<<"Height ="<<h<<"\n";
	cout<<"Lenght ="<<l<<"\n";

	set(h,&l);

	cout<<"Height ="<<h<<"\n";
	cout<<"Lenght ="<<l<<"\n";


	return 0;
}

void set(int height,int *lenght)
{
	height=100;
	*lenght=50;

	cout<<"Height ="<<height<<"\n";
	cout<<"Lenght ="<<*lenght<<"\n";
}
 
   

[Download Code]

หลังจากรันโปรแกรมออกมาก็จะเห็นว่า การพิมพ์ค่าของ height ในฟังก์ชั่นนั้นมีค่าคือ 100 แต่พอมาพิมพ์ในส่วนของเมนค่าของ height ก็จะมีเท่าเดิมคือ 170 ต่างจากค่าของ lenght ที่เมื่อเปลี่ยนค่าแล้วถึงจะกลับมาในส่วนของเมน ค่าก็ยังเปลี่ยนอยู่ครับ

พอยต์เตอร์กับฟังก์ชั่น

   
 
#include <iostream.h>

void square(void);
void three(void);
void (*pt)(void);


int main()
{
	square();
	pt=square;
	pt();

	pt=three;
	pt();

	return 0;

}

void square(void)
{
cout<<"Square"<<"\n";
}

void three(void)
{
cout<<"three"<<"\n";
}
 
   

[Download Code]

ตัวอย่างนี้แสดงให้เห็นถึงการใช้พอยต์เตอร์ ซึ่งเป็นพอยต์เตอร์ที่ชี้ไปที่ฟังก์ชั่นครับ ตัวอย่างนี้ไม่มีอะไรใหม่คงไม่ต้องอธิบายนะครับ

Dynamic Allocation

   
 
#include <iostream.h>

struct person
{
	int one;
};

int main()
{
int *pt1,*pt2;
int index=10;
char *name;
person *people;

	pt1=new int;
	*pt1=100;

	pt2=new int;
	*pt2=index;

	name=new char[10];
	name="Vikingdev";

	people=new person;

	cout<<*pt1<<" "<<*pt2<<" "<<name;

	delete pt1;
	delete pt2;
	delete people;
	delete[] name;

	return 0;
}
 
   

[Download Code]

dynamic allocation ก็เปรียบเสมือนตัวแปรตัวหนึ่ง แต่ต่างกันตรงที่ dynamic allocation นั้นจะเป็นตัวแปรที่อยู่ในเมมโมรี่ ดังนั้นจึงจะไม่ใช้พื้นที่ในฮาร์ดดิสต์ การสร้าง dynamic allocation ก็คือจะต้องสร้างพอยต์เตอร์ขึ้นมาก่อน จากนั้นก็ใช้คำสั่ง new แล้วตามด้วยชนิดของตัวแปร จะมีคำสั่งที่ผมยังไม่ได้พูดถึงนั่นก็คือ struct แต่จะพูดในบทต่อไป ที่ผมต้องนำมาใช้ในตอนนี้ก็เพื่อแสดงวิธีการใช้คำสั่ง new ว่าถ้าตัวแปรนั้นเป็น structure ก็ต้องตามด้วยชื่อของ structure แทนครับ

ที่น่าสังเกตในตัวอย่างนี้ก็คือหากต้องการสร้าง dynamic allocation ที่เป็น char หากต้องการกำหนดจำนวนอะเรย์ด้วย ก็ให้ทำแบบตัวอย่างครับ และคราวนี้ที่เพื่อนๆ ควรจะจำนั่นก็คือ เมื่อเป็นอะเรย์แล้วไม่จำเป็นต้องใช้ * นำหน้านะครับ

ก่อนจะจบโปรแกรมเราก็จะต้องใช้คำสั่ง delete เพื่อทำลายตัวแปรที่เป็น dynamic allocation ครับ ที่น่าสังเกตก็คือ การลบอะเรย์จะต้องใช้ delete[] นะครับ

 

BACK

7in1 USB-C Hub Dual Type-C Multiport Card Reader Adapter 4K HDMI For MacBook Pro
7in1 USB-C Hub Dual Type-C Multiport Card Reader Adapter 4K HDMI For MacBook Pro
สายต่อจอ สำหรับเครื่อง macbook pro 2016 (usb-c to HDMI)
สายต่อจอ สำหรับเครื่อง macbook pro 2016 (usb-c to HDMI) ความละเอียดระดับ 4K
หัวแปลง Mini DisplayPort to HDMI Adapter หัวแปลง Mini DisplayPort to HDMI Adapter สำหรับเครื่อง macbook air/pro, mac mini
หัวแปลง Mini DisplayPort to HDMI Adapter สำหรับเครื่อง macbook air/pro, mac mini
คลิปสอนเขียนโปรแกรม
เรียนเขียนโปรแกรมดอทเน็ต
เรียนเขียนโปรแกรมแอนดรอยด์
เรียนเขียนโปรแกรมเบล็คเบอร์รี่
เรียนเขียนโปรแกรมซี ซีพลัสพลัส
เรียนเขียนโปรแกรมจาวา
เรียนการใช้งานลินุกส์
เรียนการเขียนโปรแกรมวินโดว์โฟน
เรียนการเขียนโปรแกรมพีเฮชพี มายเอสคิวเอล
9M Blog บอกเล่าเรื่องราว การเขียนโปรแกรมของ นายเอ็ม
บริการ ถ่ายภาพรับปริญญา
อัตราค่าโฆษณา
 
Tutorial
eVB Tutorial
ASP.NET Webmatrix Tutorial
J2ME Tutorial
C++  Tutorial
Java  Tutorial
PHP Tutorial
ASP Tutorial
 
แบบสำรวจ
Freelance รับพัฒนาโปรแกรม

Home - Article - Tutorial - Sourcecode - Dev Handbook - Search - WebBoard - Links - About Us

สงวนลิขสิทธิ์ ห้ามคัดลอก ทำซ้ำ แก้ไข ดัดแปลง ไม่ว่าในรูปแบบใด โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์จากกระทรวงพาณิชย์: 7100503002000
Copyright 2001 SourceCode.in.th