หน้าแรก
 การบ้าน
  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
  สนใจคะ ติดต่...
2012-11-12 11:07:46
  รับทำโปรเจ็...
2012-10-29 03:10:46
  sukit_te34@hotmail.com...
2012-10-29 03:09:36
  Webboard comment
  ระบบจองตั...
2017-11-18 15:42:48
  โปรแกรมจอ...
2017-11-18 15:40:29
  ผมลอง gotoxy แ...
2017-08-28 11:45:52
  ลองสร้างต...
2017-08-27 20:09:01
  #define GLUT_DISABLE_ATEXIT...
2017-08-27 12:53:17
  ผมมีคลิปส...
2017-08-27 10:50:02
  รับ สอน matlab ...
2017-06-03 16:27:23
  เฉพาะทางข...
2017-05-25 16:18:08
  โห เครื่อ...
2017-05-25 16:12:47
  ถ้าเขียน ph...
2017-04-20 01:04:20
  Homework comment
  โค้ดตัวอย่...
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
  ประเด็นแรก...
2017-04-18 17:43:33
  อยากได้ flowchar...
2017-04-18 16:25:29
  kungking คำถามคื...
2017-03-18 23:28:36
  จงเขียนโปร...
2017-03-06 10:56:25
  ก็โค้ดทำงา...
2016-09-06 01:00:12
  Article comment
  มีcode ของ VB ไห...
2017-09-28 16:50:02
  น่าจะได้คร...
2017-07-11 09:59:35
  สามารถใช้ต...
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
  ผมส่งข้อคว...
2016-03-12 18:25:42
  โปรแกรม Terminal...
2016-02-16 11:02:01
  โปรแกรม Terminal...
2016-02-16 05:58:21
  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

สายต่อจอ สำหรับเครื่อง 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
สายต่อหูฟัง และชาร์จไฟ สำหรับ iPhone 7 และ 7 Plus
สายต่อหูฟัง และชาร์จไฟ สำหรับ iPhone 7 และ 7 Plus
หัวแปลงจาก USB-C Type ไปเป็น USB 3.1 สำหรับ MacBook
หัวแปลงจาก USB-C Type ไปเป็น USB 3.1 สำหรับ MacBook
ไขควงสำหรับเครื่อง Macbook Air/Pro
ไขควง สำหรับแกะเครื่อง Macbook Air/Pro (300บาท)
HDMI เข้า 3 ออก  1 มีรีโมท
HDMI เข้า 3 ออก 1 มีรีโมท (350บาท)
คลิปสอนเขียนโปรแกรม
เรียนเขียนโปรแกรมดอทเน็ต
เรียนเขียนโปรแกรมแอนดรอยด์
เรียนเขียนโปรแกรมเบล็คเบอร์รี่
เรียนเขียนโปรแกรมซี ซีพลัสพลัส
เรียนเขียนโปรแกรมจาวา
เรียนการใช้งานลินุกส์
เรียนการเขียนโปรแกรมวินโดว์โฟน
เรียนการเขียนโปรแกรมพีเฮชพี มายเอสคิวเอล
9M Blog บอกเล่าเรื่องราว การเขียนโปรแกรมของ นายเอ็ม
บริการ ถ่ายภาพรับปริญญา
OrmSin.com: ขายหนังสืองานฝีมือไทย-ญี่ปุ่น-จีน (country crafts)
อัตราค่าโฆษณา
 
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