際際滷

際際滷Share a Scribd company logo
C:7 CON TR畛
1. Kh叩i ni畛m
2. 畛nh ngh挑a
3. C叩c thao t叩c
4. M畛t s畛 ph辿p to叩n
5. Con tr畛 v m畉ng
6. Truy畛n 畛a ch畛 cho tham s畛 b畛i con tr畛
7. Con tr畛 tr畛 畉n con tr畛
8. Con tr畛 kh担ng ki畛u
9. Con tr畛 v c畉u tr炭c
10. B畛 nh畛 畛ng
1. Kh叩i ni畛m
 Ch炭ng ta 達 bi畉t c叩c bi畉n 畛u c坦 k鱈ch th動畛c,
ki畛u d畛 li畛u x叩c 畛nh (bi畉n t挑nh) ch鱈nh l c叩c 担
nh畛 m ch炭ng ta c坦 th畛 truy xu畉t d動畛i c叩c t棚n.
 C叩c bi畉n ny 動畛c l動u tr畛 t畉i nh畛ng ch畛 c畛 th畛
trong b畛 nh畛, t畛n t畉i trong su畛t th畛i gian th畛c thi
ch動董ng tr狸nh
 H畉n ch畉 c畛a bi畉n t挑nh:
 C畉p ph叩t 担 nh畛 d動: G但y l達nh ph鱈
 C畉p ph叩t 担 nh畛 thi畉u: L畛i ch動董ng tr狸nh
1. Kh叩i ni畛m
C++ cung c畉p m畛t ki畛u bi畉n g畛i l con tr畛 v畛i nh畛ng 畉c
i畛m sau:
 Ch畛 ph叩t sinh trong qu叩 tr狸nh th畛c hi畛n ch動董ng tr狸nh
 Khi ch畉y ch動董ng tr狸nh, k鱈ch th動畛c c畛a bi畉n, v湛ng nh畛
v 畛a ch畛 v湛ng nh畛 動畛c c畉p ph叩t cho bi畉n c坦 th畛 thay
畛i
 Sau khi th畛c hi畛n xong c坦 th畛 gi畉i ph坦ng 畛 ti畉t ki畛m
ch畛 trong b畛 nh畛
 K鱈ch th動畛c c畛a bi畉n con tr畛 kh担ng ph畛 thu畛c ki畛u d畛
li畛u, n坦 lu担n c坦 k鱈ch th動畛c c畛 畛nh l 2 byte (t湛y thu畛c
HH)
2. 畛nh ngh挑a
 Con tr畛 董n gi畉n ch畛 l 畛a ch畛 c畛a m畛t v畛 tr鱈 b畛 nh畛 v
cung c畉p c叩ch gi叩n ti畉p 畛 truy xu畉t d畛 li畛u trong b畛
nh畛
Ch動董ng 5
type *pointer_name;
Ki畛u d畛 li畛u
動畛c tr畛 t畛i
Kh担ng ph畉i l
ki畛u c畛a con tr畛
T棚n con tr畛
 ngh挑a: Khai b叩o m畛t bi畉n c坦 t棚n
l pointer_name d湛ng 畛 ch畛a 畛a
ch畛 c畛a c叩c bi畉n c坦 ki畛u l type
2. 畛nh ngh挑a
 Gi叩 tr畛 c畛a m畛t bi畉n con tr畛 l 畛a ch畛 m
n坦 tr畛 畉n
 N畉u ch動a mu畛n khai b叩o ki畛u d畛 li畛u m
con tr畛 ch畛 畉n, ta c坦 th畛 khai b叩o nh動
sau:
void *<t棚n_con_tr畛>;
V鱈 d畛
int *number;
char *character;
float *greatnumber;
 但y l ba khai b叩o c畛a con tr畛
 M畛i bi畉n tr畛 t畛i m畛t ki畛u d畛 li畛u kh叩c nhau
 Ch炭ng 畛u chi畉m m畛t l動畛ng b畛 nh畛 nh動 nhau (k鱈ch
th動畛c c畛a m畛t bi畉n con tr畛 t湛y thu畛c vo h畛 i畛u
hnh)
 D畛 li畛u m ch炭ng tr畛 t畛i kh担ng chi畉m l動畛ng b畛 nh畛
nh動 nhau, m畛t ki畛u int, m畛t ki畛u char v c叩i c嘆n l畉i
ki畛u float
3. C叩c thao t叩c tr棚n con tr畛
 L畉y 畛a ch畛
 Tham chi畉u
To叩n t畛 l畉y 畛a ch畛 (&)
 Khai b叩o m畛t bi畉n th狸 n坦 ph畉i 動畛c l動u tr畛 trong
m畛t v畛 tr鱈 c畛 th畛 trong b畛 nh畛
 Ch炭ng ta kh担ng quy畉t 畛nh n董i no bi畉n 坦
動畛c 畉t
 V畉y:
 Ai 畉t v畛 tr鱈 c畛a bi畉n?
 Ch炭ng ta c坦 th畛 bi畉t bi畉n 坦 動畛c l動u tr畛 畛 但u ?
H畛 i畛u hnh
i畛u ny c坦 th畛 動畛c th畛c hi畛n b畉ng
c叩ch 畉t tr動畛c t棚n bi畉n m畛t d畉u v
(&), c坦 ngh挑a l "畛a ch畛 c畛a".
L畉y 畛a ch畛 (tt)
Gi畉 s畛 r畉ng bi畉n andy 動畛c 畉t 畛 担 nh畛 c坦 畛a ch畛 1776
v ch炭ng ta vi畉t nh動 sau:
int andy, fred; int* ted;
andy = 25;
fred = andy;
ted = &andy;
To叩n t畛 l畉y 畛a ch畛 (&)
 C炭 ph叩p:
<t棚n_con_tr畛>=&<t棚n_bi畉n>;
  ngh挑a: G叩n 畛a ch畛 c畛a <t棚n_bi畉n> cho
con tr畛 <t棚n_con_tr畛>
To叩n t畛 tham chi畉u (*)
 C坦 th畛 truy xu畉t tr畛c ti畉p 畉n gi叩 tr畛 動畛c l動u tr畛 trong
bi畉n 動畛c tr畛 b畛i con tr畛 b畉ng c叩ch 畉t tr動畛c t棚n bi畉n
con tr畛 m畛t d畉u sao (*) - 畛 但y 動畛c d畛ch l "gi叩 tr畛
動畛c tr畛 b畛i"
V狸 v畉y, n畉u ch炭ng ta vi畉t: int beth = *ted;
C++ th畛 畛c n坦 l: "beth b畉ng gi叩 tr畛 動畛c tr畛 b畛i ted"
beth s畉 mang gi叩 tr畛 25, v狸 ted b畉ng 1776 v gi叩 tr畛 tr畛 b畛i
1776 l 25
*<t棚n_con_tr畛>;
V鱈 d畛
 B畉n ph畉i ph但n bi畛t 動畛c r畉ng ted c坦 畛a ch畛 1776,
nh動ng *ted (v畛i m畛t d畉u sao 畉ng tr動畛c) tr畛 t畛i gi叩 tr畛
動畛c l動u tr畛 trong 畛a ch畛 1776, 坦 l 25
beth = ted; // beth 動畛c g叩n b畉ng ted ( 1776 )
beth = *ted; // beth 動畛c g叩n b畉ng gi叩 tr畛 動畛c tr畛 b畛i ted ( 25 )
int andy, fred, *ted;
andy = 25;
fred = andy;
ted = &andy;
beth=*ted;
K畉t lu畉n v畛 & v *
 To叩n t畛 l畉y 畛a ch畛 (&)
N坦 動畛c d湛ng nh動 l m畛t ti畛n t畛 c畛a bi畉n v c坦
th畛 動畛c d畛ch l "畛a ch畛 c畛a
&variable1 c坦 th畛 動畛c 畛c l "畛a ch畛 c畛a variable1
 To叩n t畛 tham chi畉u (*)
N坦 ch畛 ra r畉ng c叩i c畉n 動畛c t鱈nh to叩n l n畛i dung
動畛c tr畛 b畛i bi畛u th畛c 動畛c coi nh動 l m畛t 畛a
ch畛. 動畛c d畛ch l "gi叩 tr畛 動畛c tr畛 b畛i"..
*mypointer 動畛c 畛c l "gi叩 tr畛 動畛c tr畛 b畛i mypointer"
3. M畛t s畛 ph辿p to叩n
 Ph辿p g叩n con tr畛
 Ph辿p c畛ng, tr畛 con tr畛 v畛i 1 s畛 nguy棚n
 Ph辿p tr畛 2 con tr畛
 Tng (gi畉m) 1 ng担i tr棚n bi畉n con tr畛
Ph辿p g叩n con tr畛
 2 con tr畛 c湛ng ki畛u c坦 th畛 g叩n cho nhau:
int a, *p, *b ;
float *f;
a = 5 ;
p = &a ;
b = p ; /* 炭ng */
f = p ; /* sai do kh叩c ki畛u */
Ph辿p g叩n con tr畛
 Ta c滴ng c坦 th畛 辿p ki畛u con tr畛 theo c炭 ph叩p:
(<ki畛u_k畉t_qu畉>*)<t棚n_con_tr畛>;
int a, *p, *q ;
float *f;
a = 5 ;
p = &a ;
q = p ; /* 炭ng */
f = (float*)p; /* 炭ng, nh畛 辿p ki畛u*/
V狸 sao?
#include <iostream.h>
int main ()
{
int value1 = 5, value2 = 15;
int *mypointer;
mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" << value1 << "/ value2==" << value2;
return 0;
}
10 20
畉u ti棚n ch炭ng ta g叩n cho
mypointer 畛a ch畛 c畛a value1 d湛ng
to叩n t畛 l畉y 畛a ch畛 (&)
Sau 坦 ch炭ng ta g叩n 10 cho gi叩 tr畛
動畛c tr畛 b畛i mypointer, 坦 l gi叩 tr畛
動畛c tr畛 b畛i value1
V畉y ch炭ng ta 達 s畛a bi畉n value1
m畛t c叩ch gi叩n ti畉p
M担 t畉
15 25
1112 1114
value1 value2
1112 1114mypointer
G叩n cho mypointer 畛a
ch畛 c畛a value1 [d湛ng
to叩n t畛 l畉y 畛a ch畛 (&)]
Gi叩 tr畛 動畛c tr畛 b畛i
mypointer
g叩n 10 cho gi叩
tr畛 動畛c tr畛
b畛i mypointer
10
畛a ch畛 bi畉n
Gi叩 tr畛 c畛a bi畉n
#include <iostream.h>
int main ()
{
int value1 = 5, value2 = 15;
int *p1, *p2;
p1 = &value1; // p1 = 畛a ch畛 c畛a value1
p2 = &value2; // p2 = 畛a ch畛 c畛a value2
*p1 = 10; // gi叩 tr畛 tr畛 b畛i p1 = 10
*p2 = *p1; // gi叩 tr畛 tr畛 b畛i p2 = gi叩 tr畛 tr畛 b畛i p1
p1 = p2; // p1 = p2 (ph辿p g叩n con tr畛)
*p1 = 20; // gi叩 tr畛 tr畛 b畛i p1 = 20
cout << "value1==" << value1 << "/ value2==" << value2;
return 0;
}
10 20
C畛ng, tr畛 con tr畛 v畛i 1 s畛 nguy棚n
 Ta c坦 th畛 c畛ng (+), tr畛 (-) 1 con tr畛 v畛i 1 s畛 nguy棚n
d動董ng N; k畉t qu畉 tr畉 v畛 l m畛t con tr畛, con tr畛 ny ch畛
畉n v湛ng nh畛 c叩ch v湛ng nh畛 hi畛n t畉i N
int *a;
a = (int*) malloc(20); /* c畉p v湛ng nh畛 20byte=10 s畛
nguy棚n*/
int *b, *c;
b = a + 7;
c = b - 3;
Tr畛 2 con tr畛
 Tr畛 2 con tr畛 c湛ng ki畛u s畉 cho 1 s畛
nguy棚n (int). 但y l kho畉ng c叩ch (ph畉n
t畛) gi畛a 2 con tr畛 坦
 V鱈 d畛:
c-a=4
Kh担ng th畛 c畛ng 2 con tr畛 v畛i nhau
b = a + 7;
c = b - 3;
Tng (gi畉m) 1 ng担i tr棚n bi畉n con tr畛
 Gi畉 s畛 ch炭ng ta c坦 3 con tr畛 sau:
char *mychar;
short *myshort;
long *mylong;
Ch炭ng l畉n l動畛t tr畛 t畛i 担 nh畛 1000, 2000 v 3000.
 N畉u ch炭ng ta vi畉t
mychar++;
myshort++;
mylong++;
1001
2001
3001
1001
2003
3004
Nguy棚n nh但n:
Khi c畛ng th棚m 1 vo m畛t con tr畛 th狸 n坦 s畉 tr畛 t畛i
ph畉n t畛 ti畉p theo c坦 c湛ng ki畛u m n坦 達 動畛c
畛nh ngh挑a, v狸 v畉y k鱈ch th動畛c t鱈nh b畉ng byte
c畛a ki畛u d畛 li畛u n坦 tr畛 t畛i s畉 動畛c c畛ng th棚m
vo bi畉n con tr畛
Tng (gi畉m) 1 ng担i tr棚n bi畉n con tr畛
Vi畉t c叩ch kh叩c:
mychar = mychar + 1;
myshort = myshort + 1;
mylong = mylong + 1;
L動u 箪 th畛 t畛 動u ti棚n c畛a to叩n t畛
C畉n ph畉i c畉nh b叩o b畉n r畉ng c畉 hai to叩n t畛 tng (++) v
gi畉m (--) 畛u c坦 quy畛n 動u ti棚n l畛n h董n to叩n t畛 tham chi畉u
(*), v狸 v畉y bi畛u th畛c sau 但y c坦 th畛 d畉n t畛i k畉t qu畉 sai:
*p++;
*p++ = *q++;
L畛nh 畉u ti棚n t動董ng 動董ng v畛i *(p++) i畛u m n坦 th畛c
hi畛n l tng p (畛a ch畛 担 nh畛 m n坦 tr畛 t畛i ch畛 kh担ng ph畉i
l gi叩 tr畛 tr畛 t畛i).
L畛nh th畛 hai, c畉 hai to叩n t畛 tng (++) 畛u 動畛c th畛c hi畛n
sau khi gi叩 tr畛 c畛a *q 動畛c g叩n cho *p v sau 坦 c畉 q v p
畛u tng l棚n 1. L畛nh ny t動董ng 動董ng v畛i:
*p = *q;
p++;
q++;
V鱈 d畛:
#include <iostream.h>
#include <conio.h>
void main()
{
const int SIZE=5;
int i, *point, a[SIZE]={98,87,76,65,54};
clrscr();
point=&a[0]; // point=grade
for (i=0;i<SIZE;i++)
cout<<*(a+i)<<" "; (a)
cout<<endl;
for (i=0;i<SIZE;i++)
cout<<*(point+i)<<" "; (b)
cout<<endl;
for (i=0;i<SIZE;i++)
cout<<*(point)++<<" "; (c)
getch();
}
- C叩ch ghi *(point+i) kh担ng
lm thay 畛i gi叩 tr畛 trong
point
- C叩ch ghi *point++ th狸 lm
thay 畛i gi叩 tr畛 c畛a point
sau m畛i l畉n th畛c hi畛n.
5. Con tr畛 v m畉ng
Trong th畛c t畉, t棚n c畛a m畛t m畉ng t動董ng 動董ng v畛i
畛a ch畛 ph畉n t畛 畉u ti棚n c畛a n坦, gi畛ng nh動 m畛t
con tr畛 t動董ng 動董ng v畛i 畛a ch畛 c畛a ph畉n t畛 畉u
ti棚n m n坦 tr畛 t畛i, v狸 v畉y th畛c t畉 ch炭ng hon ton
nh動 nhau. V鱈 d畛, cho hai khai b叩o sau:
int numbers[20];
int *p;
l畛nh sau s畉 h畛p l畛:
p = numbers;
5. Con tr畛 v m畉ng
 畛 但y p v numbers l t動董ng 動董ng v ch炭ng c坦 c滴ng
thu畛c t鱈nh, s畛 kh叩c bi畛t duy nh畉t l ch炭ng ta c坦 th畛 g叩n
m畛t gi叩 tr畛 kh叩c cho con tr畛 p trong khi numbers lu担n tr畛
畉n ph畉n t畛 畉u ti棚n trong s畛 20 ph畉n t畛 ki畛u int m n坦
動畛c 畛nh ngh挑a. V狸 v畉y, kh担ng gi畛ng nh動 p - 坦 l m畛t
bi畉n con tr畛 b狸nh th動畛ng, numbers l m畛t con tr畛 h畉ng.
L畛nh g叩n sau 但y l kh担ng h畛p l畛:
numbers = p;
 B畛i v狸 numbers l m畛t m畉ng (con tr畛 h畉ng) v kh担ng c坦
gi叩 tr畛 no c坦 th畛 動畛c g叩n cho c叩c h畉ng
Con tr畛 - M畉ng
#include <iostream.h>
int main ()
{
int numbers[5];
int *p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout << numbers[n] << ", ";
return 0;
}
10, 20, 30, 40, 50
Truy c畉p c叩c ph畉n t畛 m畉ng theo d畉ng
con tr畛
 C炭 ph叩p:
&<T棚n_m畉ng>[0] t/動董ng v畛i <T棚n_m畉ng>
&<T棚n_m畉ng> [<V畛_tr鱈>] t/動董ng v畛i <T棚n_m畉ng> + <V畛_tr鱈>
<T棚n_m畉ng>[<V畛_tr鱈>] t/動董ng v畛i *(<T棚n_m畉ng> + <V畛_tr鱈>)
#include <iostream.h>
#include <conio.h>
/* Nhap mang binh thuong*/
void NhapMang(int a[ ], int N){
int i;
for(i=0;i<N;i++){
cout<<"a["<<i<<"] =";
cin>>a[i];}
}
/* Nhap mang theo dang con
tro*/
void NhapContro(int a[ ], int N)
{
int i;
for(i=0;i<N;i++){
cout<<"a["<<i<<" ]=";
cin>>a+i;}
}
void main()
{
int a[20],N,i;
clrscr();
cout<<"So phan tu N= "; cin>>N;
NhapMang(a,N); /*
NhapContro(a,N)*/
cout<<"Truy cap theo kieu mang: ";
for(i=0;i<N;i++)
cout<<setw(3)<<a[i];
cout<<"Truy cap theo kieu con tro: ";
for(i=0;i<N;i++)
cout<<setw(3)<<*(a+i);
getch();
}
Truy c畉p 畉n t畛ng ph畉n t畛 ang 動畛c
qu畉n l箪 b畛i con tr畛 theo d畉ng m畉ng
 C炭 ph叩p:
<T棚n_bi畉n>[<V畛_tr鱈>] t/動董ng v畛i *(<T棚n_bi畉n> + <V畛_tr鱈>)
&<T棚n_bi畉n>[<V畛_tr鱈>] t/動董ng v畛i (<T棚n_bi畉n> + <V畛_tr鱈>)
T棚n bi畉n con tr畛 S畛 nguy棚n
C坦 m畉ng a g畛m c叩c ph但n t畛 ki畛u s畛 nguy棚n, khi vi畉t: a[3] ;
//truy xu畉t 畉n ph畉n t畛 th畛 4 trong m畉ng a.
 N畉u s畛 d畛ng ch畛 s畛 th狸 m叩y t鱈nh s畉 d畛a vo ch畛 s畛 ny
v 畛a ch畛 b畉t 畉u c畛a v湛ng nh畛 dnh cho m畉ng x叩c 畛nh
畛a ch畛 c畛a ph畉n t畛 m ta mu畛n truy xu畉t t畛i
 畛 truy xu畉t ph畉n t畛 a[3], m叩y t鱈nh x叩c 畛nh nh動 sau:
&a[3]= a[0] + (3*2) // gi畉 s畛 ki畛u int chi畉m 2 byte b畛 nh畛
a[4]a[3]a[2]a[1]a[0]
&a[0] &a[0]+(3*2)
V鱈 d畛: #include <iostream.h>
#include <conio.h>
void main()
{
const int SIZE=5;
int i, *addr, a[SIZE]={98,87,76,65,54};
clrscr();
addr=&a[0];
for (i=0;i<SIZE;i++)
cout<<a[i]<<" "; (a)
cout <<endl;
for (i=0;i<SIZE;i++)
cout<<*(addr+i)<<" "; (b)
getch();
}
畛a ch畛 b畉t 畉u c畛a
m畉ng 動畛c g叩n
vo con tr畛 addr
(addr+i) : 畉i ch畛
ph畉n t畛 th畛 i trong
m畉ng
*(addr+i) : Gi叩 tr畛
ph畉n t畛 th畛 i trong
m畉ng
*(a+i)
Xem x辿t
6. Truy畛n 畛a ch畛 cho tham s畛 b畛i con tr畛
#include <iostream.h>
#include <conio.h>
void swap(int*, int*);
void main()
{
int i=5,j=10;
clrscr();
cout <<"n Truoc khi goi ham swapn"
<<"i= "<<i<<" " <<"j= "<<j <<endl; //I=5 j=10
swap(&i,&j);
cout <<"Sau khi goi ham swapn"
<<"i= "<<i<<" " <<"j= "<<j <<endl; //I=10 j=5
getch();
}
void swap(int* x,int* y)
{
int tam;
tam=*x;
*x=*y;
*y=tam;
}
Hm swap 畛 畛i gi叩
tr畛 c畛a 2 bi畉n truy畛n
cho n坦, c叩c tham s畛
c畛a hm 動畛c khai
b叩o theo d畉ng con
tr畛 v l畛i g畛i hm
ph畉i th棚m to叩n t畛 &
畉ng tr動畛c t棚n bi畉n
truy畛n cho hm
V鱈 d畛
#include <iostream.h>
int addition (int a, int b)
{ return (a+b); }
int subtraction (int a, int b)
{ return (a-b); }
int (*minus) (int,int) = subtraction;
int operation (int x, int y, int (*functocall) (int,int))
{
int g;
g = (*functocall) (x,y);
return (g);
}
int main ()
{
int m,n;
m = operation (7, 5, &addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}
8
7. Con tr畛 tr畛 畉n con tr畛
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;
gi畉 s畛 r畉ng a,b,c 動畛c l動u 畛 c叩c 担 nh畛 7230, 8092 and
10502, ta c坦 th畛 m担 t畉 o畉n m達 tr棚n nh動 sau
c l m畛t bi畉n c坦 ki畛u (char **) mang gi叩 tr畛 8092
*c l m畛t bi畉n c坦 ki畛u (char*) mang gi叩 tr畛 7230
**c l m畛t bi畉n c坦 ki畛u (char) mang gi叩 tr畛 'z'
8. Con tr畛 kh担ng ki畛u
Con tr畛 kh担ng ki畛u l m畛t lo畉i con tr畛 畉c bi畛t.
N坦 c坦 th畛 tr畛 t畛i b畉t k狸 lo畉i d畛 li畛u no, t畛 gi叩 tr畛
nguy棚n ho畉c th畛c cho t畛i m畛t x但u k鱈 t畛.
H畉n ch畉 duy nh畉t c畛a n坦 l d畛 li畛u 動畛c tr畛 t畛i
kh担ng th畛 動畛c tham chi畉u t畛i m畛t c叩ch tr畛c ti畉p
(ch炭ng ta kh担ng th畛 d湛ng to叩n t畛 tham chi畉u * v畛i
ch炭ng) v狸 畛 di c畛a n坦 l kh担ng x叩c 畛nh
V狸 v畉y ch炭ng ta ph畉i d湛ng 畉n to叩n t畛 chuy畛n
ki畛u d畛 li畛u hay ph辿p g叩n 畛 chuy畛n con tr畛
kh担ng ki畛u thnh m畛t con tr畛 tr畛 t畛i m畛t lo畉i d畛
li畛u c畛 th畛
V鱈 d畛
#include <iostream.h>
void increase (void* data, int type)
{
switch (type)
{
case sizeof(char) : (*((char*)data))++; break;
case sizeof(short): (*((short*)data))++; break;
case sizeof(long) : (*((long*)data))++; break;
}
}
int main ()
{
char a = 5; short b = 9; long c = 12;
increase (&a,sizeof(a));
increase (&b,sizeof(b));
increase (&c,sizeof(c));
cout << (int) a << ", " << b << ", " << c;
return 0;
}
6, 10, 13
sizeof tr畉 v畛 m畛t gi叩 tr畛 h畉ng l k鱈ch th動畛c t鱈nh b畉ng byte
c畛a tham s畛 truy畛n cho n坦, v鱈 d畛 sizeof(char) b畉ng 1 v狸
k鱈ch th動畛c c畛a char l 1 byte
9. Con tr畛 v c畉u tr炭c
 Nh動 b畉t k狸 c叩c ki畛u d畛 li畛u no kh叩c, c叩c c畉u tr炭c c坦 th畛
動畛c tr畛 畉n b畛i con tr畛. Quy t畉c hon ton gi畛ng nh動
畛i v畛i b畉t k狸 ki畛u d畛 li畛u c董 b畉n no:
struct movies_t
{
char title [50];
int year;
}; movies_t amovie; movies_t *pmovie;
 畛 但y amovie l m畛t 畛i t動畛ng c坦 ki畛u movies_t v
pmovie l m畛t con tr畛 tr畛 t畛i 畛i t動畛ng movies_t.
V鱈 d畛
o畉n m達 tr棚n gi畛i thi畛u m畛t i畛u quan tr畛ng: to叩n t畛 ->.
但y l m畛t to叩n t畛 tham chi畉u ch畛 d湛ng 畛 tr畛 t畛i c叩c
c畉u tr炭c v c叩c l畛p (class). N坦 cho ph辿p ch炭ng ta kh担ng
ph畉i d湛ng ngo畉c m畛i khi tham chi畉u 畉n m畛t ph畉n t畛
c畛a c畉u tr炭c. Trong v鱈 d畛 ny ch炭ng ta s畛 d畛ng:
movies->title n坦 c坦 th畛 動畛c d畛ch thnh: (*movies).title
c畉 hai bi畛u th畛c movies->title v (*movies).title 畛u h畛p
l畛 v ch炭ng 畛u d湛ng 畛 tham chi畉u 畉n ph畉n t畛 title
c畛a c畉u tr炭c 動畛c tr畛 b畛i movies. B畉n c畉n ph但n bi畛t r探
rng v畛i:
*movies.title n坦 t動董ng 動董ng v畛i *(movies.title)
l畛nh ny d湛ng 畛 t鱈nh to叩n gi叩 tr畛 動畛c tr畛 b畛i ph畉n t畛 title
c畛a c畉u tr炭c movies, trong tr動畛ng h畛p ny (title kh担ng
ph畉i l m畛t con tr畛) n坦 ch畉ng c坦 箪 ngh挑a g狸 nhi畛u
c叩c k畉t h畛p c坦 th畛 動畛c gi畛a con tr畛 v
c畉u tr炭c
10. B畛 nh畛 畛ng
 B畛 nh畛 t挑nh
 B畛 nh畛 畛ng
 To叩n t畛 new
 To叩n t畛 delete
B畛 nh畛 t挑nh
 B畛 nh畛 t挑nh (stack)
 V湛ng nh畛 動畛c s畛 d畛ng 畛 l動u tr畛 c叩c bi畉n
ton c畛c v l畛i g畛i hm
 T畉t c畉 nh畛ng ph畉n b畛 nh畛 ch炭ng ta c坦
th畛 s畛 d畛ng l c叩c bi畉n c叩c m畉ng v c叩c
畛i t動畛ng kh叩c m ch炭ng ta 達 khai b叩o.
K鱈ch c畛 c畛a ch炭ng l c畛 畛nh v kh担ng th畛
thay 畛i trong th畛i gian ch動董ng tr狸nh ch畉y
B畛 Nh畛 畛ng
 B畛 nh畛 畛ng (heap)
 B畛 nh畛 m k鱈ch c畛 c畛a n坦 ch畛 c坦 th畛 動畛c x叩c
畛nh khi ch動董ng tr狸nh ch畉y
 Hai to叩n t畛 動畛c s畛 d畛ng
 new: c畉p ph叩t
 delete: thu h畛i
void Foo (void)
{
int *ptr = new int;
char *str = new char[10];
//...
delete ptr;
delete [ ]str;
}
Ch動董ng 5
To叩n t畛 new v new[ ]
 D畉ng th畛c c畛a to叩n t畛 ny nh動 sau:
pointer = new type
ho畉c
pointer = new type [elements]
 Bi畛u th畛c 畉u ti棚n 動畛c d湛ng 畛 c畉p ph叩t
b畛 nh畛 ch畛a m畛t ph畉n t畛 c坦 ki畛u type.
L畛nh th畛 hai 動畛c d湛ng 畛 c畉p ph叩t m畛t
kh畛i nh畛 (m畛t m畉ng) g畛m c叩c ph畉n t畛
ki畛u type
V鱈 d畛:
int * bobby;
bobby = new int [5];
 trong tr動畛ng h畛p ny, h畛 i畛u hnh dnh
ch畛 cho 5 ph畉n t畛 ki畛u int trong b畛 nh畛
v tr畉 v畛 m畛t con tr畛 tr畛 畉n 畉u c畛a kh畛i
nh畛. V狸 v畉y l炭c ny bobby tr畛 畉n m畛t
kh畛i nh畛 h畛p l畛 g畛m 5 ph畉n t畛 int.
To叩n t畛 delete
 D畉ng th畛c c畛a n坦 nh動 sau:
delete pointer;
ho畉c
delete [ ] pointer;
Bi畛u th畛c 畉u ti棚n n棚n 動畛c d湛ng 畛 gi畉i ph坦ng b畛 nh畛
動畛c c畉p ph叩t cho m畛t ph畉n t畛
L畛nh th畛 hai d湛ng 畛 gi畉i ph坦ng m畛t kh畛i nh畛 g畛m nhi畛u
ph畉n t畛 (m畉ng)
T畉o gi叩 tr畛 cho m畛t m畉ng 畛ng
v in m畉ng l棚n mn h狸nh
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
void main(void)
{
long int num,i;
int* arr;
clrscr();
cout <<"n SPT";cin >>num;
if (num>0)
{
arr=new int[num];
if (arr!=NULL)
{
randomize();
for (i=0;i<num;i++)
arr[i]=random(100);
for (i=0;i<num;i++)
cout <<*(arr+i)<<" ";
delete(arr);
}
else
cout <<K du bo nho";
}
getch();
}
V鱈 d畛
NULL
 Null l m畛t h畉ng s畛 動畛c 畛nh ngh挑a trong
th動 vi畛n C++ d湛ng 畛 bi畛u th畛 con tr畛 null.
Trong tr動畛ng h畛p h畉ng s畛 ny ch動a
動畛c 畛nh ngh挑a, b畉n c坦 th畛 t畛 畛nh ngh挑a
n坦
 C炭 ph叩p:
#define NULL 0
B畛 nh畛 畛ng trong ANSI-C
 To叩n t畛 new v delete l 畛c quy畛n c畛a
C++ v ch炭ng kh担ng c坦 trong ng担n ng畛
C.
 Trong ng担n ng畛 C, 畛 s畛 d畛ng b畛 nh畛
畛ng ph畉i s畛 d畛ng th動 vi畛n stdlib.h.
 C叩ch ny c滴ng h畛p l畛 trong C++ v n坦
v畉n 動畛c s畛 d畛ng trong m畛t s畛 ch動董ng
tr狸nh.
 Hm malloc: C畉p ph叩t b畛 nh畛 畛ng cho con tr畛
void * malloc (size_t nbytes);
 Hm calloc: Gi畛ng malloc
void * calloc (size_t nelements, size_t size);
 Hm realloc: Thay 畛i k鱈ch th動畛c kh畛i nh畛 達 動畛c c畉p
ph叩t cho con tr畛
void * realloc (void * pointer, size_t size);
 Hm realloc: Gi畉i ph嘆ng m畛t kh畛i nh畛 畛ng 達 動畛c
c畉p ph叩t b畛i malloc, calloc ho畉c realloc.
void free (void * pointer);

More Related Content

What's hot (15)

際際滷 pointer sepro
際際滷 pointer sepro際際滷 pointer sepro
際際滷 pointer sepro
Anh L棚 Ng畛c
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
Minh Ngoc Tran
Nmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytuNmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytu
Minh Ngoc Tran
Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛
Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛 Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛
Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛
nataliej4
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
Minh Ngoc Tran
Lesson05
Lesson05Lesson05
Lesson05
Lam Nguyen
Session 4
Session 4Session 4
Session 4
pnanhvn
String c++
String c++String c++
String c++
ptquang160492
Thu vien lap trinh c++
Thu vien lap trinh c++Thu vien lap trinh c++
Thu vien lap trinh c++
ptquang160492
際際滷 pointer sepro
際際滷 pointer sepro際際滷 pointer sepro
際際滷 pointer sepro
Anh L棚 Ng畛c
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
Minh Ngoc Tran
Nmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytuNmlt c09 chuoi_kytu
Nmlt c09 chuoi_kytu
Minh Ngoc Tran
Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛
Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛 Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛
Bi Gi畉ng Ng担n Ng畛 L畉p Tr狸nh CC++ - Con Tr畛 V S畛 H畛c 畛a Ch畛
nataliej4
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
Minh Ngoc Tran
Session 4
Session 4Session 4
Session 4
pnanhvn
Thu vien lap trinh c++
Thu vien lap trinh c++Thu vien lap trinh c++
Thu vien lap trinh c++
ptquang160492

Similar to Pointer vn (20)

Bi 3_ Pointer.docxfasssssssdsadsadsadsadsa
Bi 3_ Pointer.docxfasssssssdsadsadsadsadsaBi 3_ Pointer.docxfasssssssdsadsadsadsadsa
Bi 3_ Pointer.docxfasssssssdsadsadsadsadsa
nguyenvanthanh76bk
Pointer
PointerPointer
Pointer
Phi T動畛ng
Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++
Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++
Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++
LAnhHuy4
Group 14_pointer_beta2.pptx
Group 14_pointer_beta2.pptxGroup 14_pointer_beta2.pptx
Group 14_pointer_beta2.pptx
ChuHaBnh
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdf
KinHongnh
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
Huynh MVT
T坦m t畉t c叩c hm chu畉n c畛a c
T坦m t畉t c叩c hm chu畉n c畛a cT坦m t畉t c叩c hm chu畉n c畛a c
T坦m t畉t c叩c hm chu畉n c畛a c
H畛 L畛i
L畉p tr狸nh C cho VK 8051
L畉p tr狸nh C cho VK 8051L畉p tr狸nh C cho VK 8051
L畉p tr狸nh C cho VK 8051
Mr Giap
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlop
H畛 L畛i
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdfLTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
duyy2k5
C 畉n C++ ph畉n 1
C 畉n C++ ph畉n 1C 畉n C++ ph畉n 1
C 畉n C++ ph畉n 1
TechMaster Vietnam
Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06
Quach Long
4 Pointer String Struct
4 Pointer String  Struct4 Pointer String  Struct
4 Pointer String Struct
Cuong
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
ky thuat lap tirnh giao tiep  ky thuat lap tirnh giao tiepky thuat lap tirnh giao tiep  ky thuat lap tirnh giao tiep
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
phanhoainamPhan
3 Function
3 Function3 Function
3 Function
Cuong
Con tr畛 trong C
Con tr畛 trong CCon tr畛 trong C
Con tr畛 trong C
Nguy畛n Vn Hi畉u
3 Function
3 Function3 Function
3 Function
Cuong
Bi 3_ Pointer.docxfasssssssdsadsadsadsadsa
Bi 3_ Pointer.docxfasssssssdsadsadsadsadsaBi 3_ Pointer.docxfasssssssdsadsadsadsadsa
Bi 3_ Pointer.docxfasssssssdsadsadsadsadsa
nguyenvanthanh76bk
Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++
Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++
Gi畛i thi畛u ng担n ng畛 l畉p tr狸nh C++
LAnhHuy4
Group 14_pointer_beta2.pptx
Group 14_pointer_beta2.pptxGroup 14_pointer_beta2.pptx
Group 14_pointer_beta2.pptx
ChuHaBnh
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdf
KinHongnh
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
Huynh MVT
T坦m t畉t c叩c hm chu畉n c畛a c
T坦m t畉t c叩c hm chu畉n c畛a cT坦m t畉t c叩c hm chu畉n c畛a c
T坦m t畉t c叩c hm chu畉n c畛a c
H畛 L畛i
L畉p tr狸nh C cho VK 8051
L畉p tr狸nh C cho VK 8051L畉p tr狸nh C cho VK 8051
L畉p tr狸nh C cho VK 8051
Mr Giap
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlop
H畛 L畛i
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdfLTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
duyy2k5
Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06Stl vector nguyen_trihai_11520094_khmt06
Stl vector nguyen_trihai_11520094_khmt06
Quach Long
4 Pointer String Struct
4 Pointer String  Struct4 Pointer String  Struct
4 Pointer String Struct
Cuong
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
ky thuat lap tirnh giao tiep  ky thuat lap tirnh giao tiepky thuat lap tirnh giao tiep  ky thuat lap tirnh giao tiep
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
phanhoainamPhan
3 Function
3 Function3 Function
3 Function
Cuong
3 Function
3 Function3 Function
3 Function
Cuong

More from Harry Potter (20)

How to build a rest api.pptx
How to build a rest api.pptxHow to build a rest api.pptx
How to build a rest api.pptx
Harry Potter
Business analytics and data mining
Business analytics and data miningBusiness analytics and data mining
Business analytics and data mining
Harry Potter
Big picture of data mining
Big picture of data miningBig picture of data mining
Big picture of data mining
Harry Potter
Data mining and knowledge discovery
Data mining and knowledge discoveryData mining and knowledge discovery
Data mining and knowledge discovery
Harry Potter
Cache recap
Cache recapCache recap
Cache recap
Harry Potter
Directory based cache coherence
Directory based cache coherenceDirectory based cache coherence
Directory based cache coherence
Harry Potter
How analysis services caching works
How analysis services caching worksHow analysis services caching works
How analysis services caching works
Harry Potter
Optimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessorsOptimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessors
Harry Potter
Hardware managed cache
Hardware managed cacheHardware managed cache
Hardware managed cache
Harry Potter
Smm & caching
Smm & cachingSmm & caching
Smm & caching
Harry Potter
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithms
Harry Potter
Abstract data types
Abstract data typesAbstract data types
Abstract data types
Harry Potter
Abstraction file
Abstraction fileAbstraction file
Abstraction file
Harry Potter
Object model
Object modelObject model
Object model
Harry Potter
Concurrency with java
Concurrency with javaConcurrency with java
Concurrency with java
Harry Potter
Encapsulation anonymous class
Encapsulation anonymous classEncapsulation anonymous class
Encapsulation anonymous class
Harry Potter
Abstract class
Abstract classAbstract class
Abstract class
Harry Potter
Object oriented analysis
Object oriented analysisObject oriented analysis
Object oriented analysis
Harry Potter
Api crash
Api crashApi crash
Api crash
Harry Potter
Rest api to integrate with your site
Rest api to integrate with your siteRest api to integrate with your site
Rest api to integrate with your site
Harry Potter
How to build a rest api.pptx
How to build a rest api.pptxHow to build a rest api.pptx
How to build a rest api.pptx
Harry Potter
Business analytics and data mining
Business analytics and data miningBusiness analytics and data mining
Business analytics and data mining
Harry Potter
Big picture of data mining
Big picture of data miningBig picture of data mining
Big picture of data mining
Harry Potter
Data mining and knowledge discovery
Data mining and knowledge discoveryData mining and knowledge discovery
Data mining and knowledge discovery
Harry Potter
Directory based cache coherence
Directory based cache coherenceDirectory based cache coherence
Directory based cache coherence
Harry Potter
How analysis services caching works
How analysis services caching worksHow analysis services caching works
How analysis services caching works
Harry Potter
Optimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessorsOptimizing shared caches in chip multiprocessors
Optimizing shared caches in chip multiprocessors
Harry Potter
Hardware managed cache
Hardware managed cacheHardware managed cache
Hardware managed cache
Harry Potter
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithms
Harry Potter
Abstract data types
Abstract data typesAbstract data types
Abstract data types
Harry Potter
Abstraction file
Abstraction fileAbstraction file
Abstraction file
Harry Potter
Concurrency with java
Concurrency with javaConcurrency with java
Concurrency with java
Harry Potter
Encapsulation anonymous class
Encapsulation anonymous classEncapsulation anonymous class
Encapsulation anonymous class
Harry Potter
Object oriented analysis
Object oriented analysisObject oriented analysis
Object oriented analysis
Harry Potter
Rest api to integrate with your site
Rest api to integrate with your siteRest api to integrate with your site
Rest api to integrate with your site
Harry Potter

Pointer vn

  • 1. C:7 CON TR畛 1. Kh叩i ni畛m 2. 畛nh ngh挑a 3. C叩c thao t叩c 4. M畛t s畛 ph辿p to叩n 5. Con tr畛 v m畉ng 6. Truy畛n 畛a ch畛 cho tham s畛 b畛i con tr畛 7. Con tr畛 tr畛 畉n con tr畛 8. Con tr畛 kh担ng ki畛u 9. Con tr畛 v c畉u tr炭c 10. B畛 nh畛 畛ng
  • 2. 1. Kh叩i ni畛m Ch炭ng ta 達 bi畉t c叩c bi畉n 畛u c坦 k鱈ch th動畛c, ki畛u d畛 li畛u x叩c 畛nh (bi畉n t挑nh) ch鱈nh l c叩c 担 nh畛 m ch炭ng ta c坦 th畛 truy xu畉t d動畛i c叩c t棚n. C叩c bi畉n ny 動畛c l動u tr畛 t畉i nh畛ng ch畛 c畛 th畛 trong b畛 nh畛, t畛n t畉i trong su畛t th畛i gian th畛c thi ch動董ng tr狸nh H畉n ch畉 c畛a bi畉n t挑nh: C畉p ph叩t 担 nh畛 d動: G但y l達nh ph鱈 C畉p ph叩t 担 nh畛 thi畉u: L畛i ch動董ng tr狸nh
  • 3. 1. Kh叩i ni畛m C++ cung c畉p m畛t ki畛u bi畉n g畛i l con tr畛 v畛i nh畛ng 畉c i畛m sau: Ch畛 ph叩t sinh trong qu叩 tr狸nh th畛c hi畛n ch動董ng tr狸nh Khi ch畉y ch動董ng tr狸nh, k鱈ch th動畛c c畛a bi畉n, v湛ng nh畛 v 畛a ch畛 v湛ng nh畛 動畛c c畉p ph叩t cho bi畉n c坦 th畛 thay 畛i Sau khi th畛c hi畛n xong c坦 th畛 gi畉i ph坦ng 畛 ti畉t ki畛m ch畛 trong b畛 nh畛 K鱈ch th動畛c c畛a bi畉n con tr畛 kh担ng ph畛 thu畛c ki畛u d畛 li畛u, n坦 lu担n c坦 k鱈ch th動畛c c畛 畛nh l 2 byte (t湛y thu畛c HH)
  • 4. 2. 畛nh ngh挑a Con tr畛 董n gi畉n ch畛 l 畛a ch畛 c畛a m畛t v畛 tr鱈 b畛 nh畛 v cung c畉p c叩ch gi叩n ti畉p 畛 truy xu畉t d畛 li畛u trong b畛 nh畛 Ch動董ng 5 type *pointer_name; Ki畛u d畛 li畛u 動畛c tr畛 t畛i Kh担ng ph畉i l ki畛u c畛a con tr畛 T棚n con tr畛 ngh挑a: Khai b叩o m畛t bi畉n c坦 t棚n l pointer_name d湛ng 畛 ch畛a 畛a ch畛 c畛a c叩c bi畉n c坦 ki畛u l type
  • 5. 2. 畛nh ngh挑a Gi叩 tr畛 c畛a m畛t bi畉n con tr畛 l 畛a ch畛 m n坦 tr畛 畉n N畉u ch動a mu畛n khai b叩o ki畛u d畛 li畛u m con tr畛 ch畛 畉n, ta c坦 th畛 khai b叩o nh動 sau: void *<t棚n_con_tr畛>;
  • 6. V鱈 d畛 int *number; char *character; float *greatnumber; 但y l ba khai b叩o c畛a con tr畛 M畛i bi畉n tr畛 t畛i m畛t ki畛u d畛 li畛u kh叩c nhau Ch炭ng 畛u chi畉m m畛t l動畛ng b畛 nh畛 nh動 nhau (k鱈ch th動畛c c畛a m畛t bi畉n con tr畛 t湛y thu畛c vo h畛 i畛u hnh) D畛 li畛u m ch炭ng tr畛 t畛i kh担ng chi畉m l動畛ng b畛 nh畛 nh動 nhau, m畛t ki畛u int, m畛t ki畛u char v c叩i c嘆n l畉i ki畛u float
  • 7. 3. C叩c thao t叩c tr棚n con tr畛 L畉y 畛a ch畛 Tham chi畉u
  • 8. To叩n t畛 l畉y 畛a ch畛 (&) Khai b叩o m畛t bi畉n th狸 n坦 ph畉i 動畛c l動u tr畛 trong m畛t v畛 tr鱈 c畛 th畛 trong b畛 nh畛 Ch炭ng ta kh担ng quy畉t 畛nh n董i no bi畉n 坦 動畛c 畉t V畉y: Ai 畉t v畛 tr鱈 c畛a bi畉n? Ch炭ng ta c坦 th畛 bi畉t bi畉n 坦 動畛c l動u tr畛 畛 但u ? H畛 i畛u hnh i畛u ny c坦 th畛 動畛c th畛c hi畛n b畉ng c叩ch 畉t tr動畛c t棚n bi畉n m畛t d畉u v (&), c坦 ngh挑a l "畛a ch畛 c畛a".
  • 9. L畉y 畛a ch畛 (tt) Gi畉 s畛 r畉ng bi畉n andy 動畛c 畉t 畛 担 nh畛 c坦 畛a ch畛 1776 v ch炭ng ta vi畉t nh動 sau: int andy, fred; int* ted; andy = 25; fred = andy; ted = &andy;
  • 10. To叩n t畛 l畉y 畛a ch畛 (&) C炭 ph叩p: <t棚n_con_tr畛>=&<t棚n_bi畉n>; ngh挑a: G叩n 畛a ch畛 c畛a <t棚n_bi畉n> cho con tr畛 <t棚n_con_tr畛>
  • 11. To叩n t畛 tham chi畉u (*) C坦 th畛 truy xu畉t tr畛c ti畉p 畉n gi叩 tr畛 動畛c l動u tr畛 trong bi畉n 動畛c tr畛 b畛i con tr畛 b畉ng c叩ch 畉t tr動畛c t棚n bi畉n con tr畛 m畛t d畉u sao (*) - 畛 但y 動畛c d畛ch l "gi叩 tr畛 動畛c tr畛 b畛i" V狸 v畉y, n畉u ch炭ng ta vi畉t: int beth = *ted; C++ th畛 畛c n坦 l: "beth b畉ng gi叩 tr畛 動畛c tr畛 b畛i ted" beth s畉 mang gi叩 tr畛 25, v狸 ted b畉ng 1776 v gi叩 tr畛 tr畛 b畛i 1776 l 25 *<t棚n_con_tr畛>;
  • 12. V鱈 d畛 B畉n ph畉i ph但n bi畛t 動畛c r畉ng ted c坦 畛a ch畛 1776, nh動ng *ted (v畛i m畛t d畉u sao 畉ng tr動畛c) tr畛 t畛i gi叩 tr畛 動畛c l動u tr畛 trong 畛a ch畛 1776, 坦 l 25 beth = ted; // beth 動畛c g叩n b畉ng ted ( 1776 ) beth = *ted; // beth 動畛c g叩n b畉ng gi叩 tr畛 動畛c tr畛 b畛i ted ( 25 ) int andy, fred, *ted; andy = 25; fred = andy; ted = &andy; beth=*ted;
  • 13. K畉t lu畉n v畛 & v * To叩n t畛 l畉y 畛a ch畛 (&) N坦 動畛c d湛ng nh動 l m畛t ti畛n t畛 c畛a bi畉n v c坦 th畛 動畛c d畛ch l "畛a ch畛 c畛a &variable1 c坦 th畛 動畛c 畛c l "畛a ch畛 c畛a variable1 To叩n t畛 tham chi畉u (*) N坦 ch畛 ra r畉ng c叩i c畉n 動畛c t鱈nh to叩n l n畛i dung 動畛c tr畛 b畛i bi畛u th畛c 動畛c coi nh動 l m畛t 畛a ch畛. 動畛c d畛ch l "gi叩 tr畛 動畛c tr畛 b畛i".. *mypointer 動畛c 畛c l "gi叩 tr畛 動畛c tr畛 b畛i mypointer"
  • 14. 3. M畛t s畛 ph辿p to叩n Ph辿p g叩n con tr畛 Ph辿p c畛ng, tr畛 con tr畛 v畛i 1 s畛 nguy棚n Ph辿p tr畛 2 con tr畛 Tng (gi畉m) 1 ng担i tr棚n bi畉n con tr畛
  • 15. Ph辿p g叩n con tr畛 2 con tr畛 c湛ng ki畛u c坦 th畛 g叩n cho nhau: int a, *p, *b ; float *f; a = 5 ; p = &a ; b = p ; /* 炭ng */ f = p ; /* sai do kh叩c ki畛u */
  • 16. Ph辿p g叩n con tr畛 Ta c滴ng c坦 th畛 辿p ki畛u con tr畛 theo c炭 ph叩p: (<ki畛u_k畉t_qu畉>*)<t棚n_con_tr畛>; int a, *p, *q ; float *f; a = 5 ; p = &a ; q = p ; /* 炭ng */ f = (float*)p; /* 炭ng, nh畛 辿p ki畛u*/
  • 17. V狸 sao? #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *mypointer; mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout << "value1==" << value1 << "/ value2==" << value2; return 0; } 10 20 畉u ti棚n ch炭ng ta g叩n cho mypointer 畛a ch畛 c畛a value1 d湛ng to叩n t畛 l畉y 畛a ch畛 (&) Sau 坦 ch炭ng ta g叩n 10 cho gi叩 tr畛 動畛c tr畛 b畛i mypointer, 坦 l gi叩 tr畛 動畛c tr畛 b畛i value1 V畉y ch炭ng ta 達 s畛a bi畉n value1 m畛t c叩ch gi叩n ti畉p
  • 18. M担 t畉 15 25 1112 1114 value1 value2 1112 1114mypointer G叩n cho mypointer 畛a ch畛 c畛a value1 [d湛ng to叩n t畛 l畉y 畛a ch畛 (&)] Gi叩 tr畛 動畛c tr畛 b畛i mypointer g叩n 10 cho gi叩 tr畛 動畛c tr畛 b畛i mypointer 10 畛a ch畛 bi畉n Gi叩 tr畛 c畛a bi畉n
  • 19. #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = 畛a ch畛 c畛a value1 p2 = &value2; // p2 = 畛a ch畛 c畛a value2 *p1 = 10; // gi叩 tr畛 tr畛 b畛i p1 = 10 *p2 = *p1; // gi叩 tr畛 tr畛 b畛i p2 = gi叩 tr畛 tr畛 b畛i p1 p1 = p2; // p1 = p2 (ph辿p g叩n con tr畛) *p1 = 20; // gi叩 tr畛 tr畛 b畛i p1 = 20 cout << "value1==" << value1 << "/ value2==" << value2; return 0; } 10 20
  • 20. C畛ng, tr畛 con tr畛 v畛i 1 s畛 nguy棚n Ta c坦 th畛 c畛ng (+), tr畛 (-) 1 con tr畛 v畛i 1 s畛 nguy棚n d動董ng N; k畉t qu畉 tr畉 v畛 l m畛t con tr畛, con tr畛 ny ch畛 畉n v湛ng nh畛 c叩ch v湛ng nh畛 hi畛n t畉i N int *a; a = (int*) malloc(20); /* c畉p v湛ng nh畛 20byte=10 s畛 nguy棚n*/ int *b, *c; b = a + 7; c = b - 3;
  • 21. Tr畛 2 con tr畛 Tr畛 2 con tr畛 c湛ng ki畛u s畉 cho 1 s畛 nguy棚n (int). 但y l kho畉ng c叩ch (ph畉n t畛) gi畛a 2 con tr畛 坦 V鱈 d畛: c-a=4 Kh担ng th畛 c畛ng 2 con tr畛 v畛i nhau b = a + 7; c = b - 3;
  • 22. Tng (gi畉m) 1 ng担i tr棚n bi畉n con tr畛 Gi畉 s畛 ch炭ng ta c坦 3 con tr畛 sau: char *mychar; short *myshort; long *mylong; Ch炭ng l畉n l動畛t tr畛 t畛i 担 nh畛 1000, 2000 v 3000. N畉u ch炭ng ta vi畉t mychar++; myshort++; mylong++; 1001 2001 3001 1001 2003 3004 Nguy棚n nh但n: Khi c畛ng th棚m 1 vo m畛t con tr畛 th狸 n坦 s畉 tr畛 t畛i ph畉n t畛 ti畉p theo c坦 c湛ng ki畛u m n坦 達 動畛c 畛nh ngh挑a, v狸 v畉y k鱈ch th動畛c t鱈nh b畉ng byte c畛a ki畛u d畛 li畛u n坦 tr畛 t畛i s畉 動畛c c畛ng th棚m vo bi畉n con tr畛
  • 23. Tng (gi畉m) 1 ng担i tr棚n bi畉n con tr畛 Vi畉t c叩ch kh叩c: mychar = mychar + 1; myshort = myshort + 1; mylong = mylong + 1;
  • 24. L動u 箪 th畛 t畛 動u ti棚n c畛a to叩n t畛 C畉n ph畉i c畉nh b叩o b畉n r畉ng c畉 hai to叩n t畛 tng (++) v gi畉m (--) 畛u c坦 quy畛n 動u ti棚n l畛n h董n to叩n t畛 tham chi畉u (*), v狸 v畉y bi畛u th畛c sau 但y c坦 th畛 d畉n t畛i k畉t qu畉 sai: *p++; *p++ = *q++; L畛nh 畉u ti棚n t動董ng 動董ng v畛i *(p++) i畛u m n坦 th畛c hi畛n l tng p (畛a ch畛 担 nh畛 m n坦 tr畛 t畛i ch畛 kh担ng ph畉i l gi叩 tr畛 tr畛 t畛i). L畛nh th畛 hai, c畉 hai to叩n t畛 tng (++) 畛u 動畛c th畛c hi畛n sau khi gi叩 tr畛 c畛a *q 動畛c g叩n cho *p v sau 坦 c畉 q v p 畛u tng l棚n 1. L畛nh ny t動董ng 動董ng v畛i: *p = *q; p++; q++;
  • 25. V鱈 d畛: #include <iostream.h> #include <conio.h> void main() { const int SIZE=5; int i, *point, a[SIZE]={98,87,76,65,54}; clrscr(); point=&a[0]; // point=grade for (i=0;i<SIZE;i++) cout<<*(a+i)<<" "; (a) cout<<endl; for (i=0;i<SIZE;i++) cout<<*(point+i)<<" "; (b) cout<<endl; for (i=0;i<SIZE;i++) cout<<*(point)++<<" "; (c) getch(); } - C叩ch ghi *(point+i) kh担ng lm thay 畛i gi叩 tr畛 trong point - C叩ch ghi *point++ th狸 lm thay 畛i gi叩 tr畛 c畛a point sau m畛i l畉n th畛c hi畛n.
  • 26. 5. Con tr畛 v m畉ng Trong th畛c t畉, t棚n c畛a m畛t m畉ng t動董ng 動董ng v畛i 畛a ch畛 ph畉n t畛 畉u ti棚n c畛a n坦, gi畛ng nh動 m畛t con tr畛 t動董ng 動董ng v畛i 畛a ch畛 c畛a ph畉n t畛 畉u ti棚n m n坦 tr畛 t畛i, v狸 v畉y th畛c t畉 ch炭ng hon ton nh動 nhau. V鱈 d畛, cho hai khai b叩o sau: int numbers[20]; int *p; l畛nh sau s畉 h畛p l畛: p = numbers;
  • 27. 5. Con tr畛 v m畉ng 畛 但y p v numbers l t動董ng 動董ng v ch炭ng c坦 c滴ng thu畛c t鱈nh, s畛 kh叩c bi畛t duy nh畉t l ch炭ng ta c坦 th畛 g叩n m畛t gi叩 tr畛 kh叩c cho con tr畛 p trong khi numbers lu担n tr畛 畉n ph畉n t畛 畉u ti棚n trong s畛 20 ph畉n t畛 ki畛u int m n坦 動畛c 畛nh ngh挑a. V狸 v畉y, kh担ng gi畛ng nh動 p - 坦 l m畛t bi畉n con tr畛 b狸nh th動畛ng, numbers l m畛t con tr畛 h畉ng. L畛nh g叩n sau 但y l kh担ng h畛p l畛: numbers = p; B畛i v狸 numbers l m畛t m畉ng (con tr畛 h畉ng) v kh担ng c坦 gi叩 tr畛 no c坦 th畛 動畛c g叩n cho c叩c h畉ng
  • 28. Con tr畛 - M畉ng #include <iostream.h> int main () { int numbers[5]; int *p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0; } 10, 20, 30, 40, 50
  • 29. Truy c畉p c叩c ph畉n t畛 m畉ng theo d畉ng con tr畛 C炭 ph叩p: &<T棚n_m畉ng>[0] t/動董ng v畛i <T棚n_m畉ng> &<T棚n_m畉ng> [<V畛_tr鱈>] t/動董ng v畛i <T棚n_m畉ng> + <V畛_tr鱈> <T棚n_m畉ng>[<V畛_tr鱈>] t/動董ng v畛i *(<T棚n_m畉ng> + <V畛_tr鱈>)
  • 30. #include <iostream.h> #include <conio.h> /* Nhap mang binh thuong*/ void NhapMang(int a[ ], int N){ int i; for(i=0;i<N;i++){ cout<<"a["<<i<<"] ="; cin>>a[i];} } /* Nhap mang theo dang con tro*/ void NhapContro(int a[ ], int N) { int i; for(i=0;i<N;i++){ cout<<"a["<<i<<" ]="; cin>>a+i;} } void main() { int a[20],N,i; clrscr(); cout<<"So phan tu N= "; cin>>N; NhapMang(a,N); /* NhapContro(a,N)*/ cout<<"Truy cap theo kieu mang: "; for(i=0;i<N;i++) cout<<setw(3)<<a[i]; cout<<"Truy cap theo kieu con tro: "; for(i=0;i<N;i++) cout<<setw(3)<<*(a+i); getch(); }
  • 31. Truy c畉p 畉n t畛ng ph畉n t畛 ang 動畛c qu畉n l箪 b畛i con tr畛 theo d畉ng m畉ng C炭 ph叩p: <T棚n_bi畉n>[<V畛_tr鱈>] t/動董ng v畛i *(<T棚n_bi畉n> + <V畛_tr鱈>) &<T棚n_bi畉n>[<V畛_tr鱈>] t/動董ng v畛i (<T棚n_bi畉n> + <V畛_tr鱈>) T棚n bi畉n con tr畛 S畛 nguy棚n
  • 32. C坦 m畉ng a g畛m c叩c ph但n t畛 ki畛u s畛 nguy棚n, khi vi畉t: a[3] ; //truy xu畉t 畉n ph畉n t畛 th畛 4 trong m畉ng a. N畉u s畛 d畛ng ch畛 s畛 th狸 m叩y t鱈nh s畉 d畛a vo ch畛 s畛 ny v 畛a ch畛 b畉t 畉u c畛a v湛ng nh畛 dnh cho m畉ng x叩c 畛nh 畛a ch畛 c畛a ph畉n t畛 m ta mu畛n truy xu畉t t畛i 畛 truy xu畉t ph畉n t畛 a[3], m叩y t鱈nh x叩c 畛nh nh動 sau: &a[3]= a[0] + (3*2) // gi畉 s畛 ki畛u int chi畉m 2 byte b畛 nh畛 a[4]a[3]a[2]a[1]a[0] &a[0] &a[0]+(3*2)
  • 33. V鱈 d畛: #include <iostream.h> #include <conio.h> void main() { const int SIZE=5; int i, *addr, a[SIZE]={98,87,76,65,54}; clrscr(); addr=&a[0]; for (i=0;i<SIZE;i++) cout<<a[i]<<" "; (a) cout <<endl; for (i=0;i<SIZE;i++) cout<<*(addr+i)<<" "; (b) getch(); } 畛a ch畛 b畉t 畉u c畛a m畉ng 動畛c g叩n vo con tr畛 addr (addr+i) : 畉i ch畛 ph畉n t畛 th畛 i trong m畉ng *(addr+i) : Gi叩 tr畛 ph畉n t畛 th畛 i trong m畉ng *(a+i)
  • 35. 6. Truy畛n 畛a ch畛 cho tham s畛 b畛i con tr畛 #include <iostream.h> #include <conio.h> void swap(int*, int*); void main() { int i=5,j=10; clrscr(); cout <<"n Truoc khi goi ham swapn" <<"i= "<<i<<" " <<"j= "<<j <<endl; //I=5 j=10 swap(&i,&j); cout <<"Sau khi goi ham swapn" <<"i= "<<i<<" " <<"j= "<<j <<endl; //I=10 j=5 getch(); } void swap(int* x,int* y) { int tam; tam=*x; *x=*y; *y=tam; } Hm swap 畛 畛i gi叩 tr畛 c畛a 2 bi畉n truy畛n cho n坦, c叩c tham s畛 c畛a hm 動畛c khai b叩o theo d畉ng con tr畛 v l畛i g畛i hm ph畉i th棚m to叩n t畛 & 畉ng tr動畛c t棚n bi畉n truy畛n cho hm
  • 36. V鱈 d畛 #include <iostream.h> int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int (*minus) (int,int) = subtraction; int operation (int x, int y, int (*functocall) (int,int)) { int g; g = (*functocall) (x,y); return (g); } int main () { int m,n; m = operation (7, 5, &addition); n = operation (20, m, minus); cout <<n; return 0; } 8
  • 37. 7. Con tr畛 tr畛 畉n con tr畛 char a; char * b; char ** c; a = 'z'; b = &a; c = &b; gi畉 s畛 r畉ng a,b,c 動畛c l動u 畛 c叩c 担 nh畛 7230, 8092 and 10502, ta c坦 th畛 m担 t畉 o畉n m達 tr棚n nh動 sau c l m畛t bi畉n c坦 ki畛u (char **) mang gi叩 tr畛 8092 *c l m畛t bi畉n c坦 ki畛u (char*) mang gi叩 tr畛 7230 **c l m畛t bi畉n c坦 ki畛u (char) mang gi叩 tr畛 'z'
  • 38. 8. Con tr畛 kh担ng ki畛u Con tr畛 kh担ng ki畛u l m畛t lo畉i con tr畛 畉c bi畛t. N坦 c坦 th畛 tr畛 t畛i b畉t k狸 lo畉i d畛 li畛u no, t畛 gi叩 tr畛 nguy棚n ho畉c th畛c cho t畛i m畛t x但u k鱈 t畛. H畉n ch畉 duy nh畉t c畛a n坦 l d畛 li畛u 動畛c tr畛 t畛i kh担ng th畛 動畛c tham chi畉u t畛i m畛t c叩ch tr畛c ti畉p (ch炭ng ta kh担ng th畛 d湛ng to叩n t畛 tham chi畉u * v畛i ch炭ng) v狸 畛 di c畛a n坦 l kh担ng x叩c 畛nh V狸 v畉y ch炭ng ta ph畉i d湛ng 畉n to叩n t畛 chuy畛n ki畛u d畛 li畛u hay ph辿p g叩n 畛 chuy畛n con tr畛 kh担ng ki畛u thnh m畛t con tr畛 tr畛 t畛i m畛t lo畉i d畛 li畛u c畛 th畛
  • 39. V鱈 d畛 #include <iostream.h> void increase (void* data, int type) { switch (type) { case sizeof(char) : (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long) : (*((long*)data))++; break; } } int main () { char a = 5; short b = 9; long c = 12; increase (&a,sizeof(a)); increase (&b,sizeof(b)); increase (&c,sizeof(c)); cout << (int) a << ", " << b << ", " << c; return 0; } 6, 10, 13 sizeof tr畉 v畛 m畛t gi叩 tr畛 h畉ng l k鱈ch th動畛c t鱈nh b畉ng byte c畛a tham s畛 truy畛n cho n坦, v鱈 d畛 sizeof(char) b畉ng 1 v狸 k鱈ch th動畛c c畛a char l 1 byte
  • 40. 9. Con tr畛 v c畉u tr炭c Nh動 b畉t k狸 c叩c ki畛u d畛 li畛u no kh叩c, c叩c c畉u tr炭c c坦 th畛 動畛c tr畛 畉n b畛i con tr畛. Quy t畉c hon ton gi畛ng nh動 畛i v畛i b畉t k狸 ki畛u d畛 li畛u c董 b畉n no: struct movies_t { char title [50]; int year; }; movies_t amovie; movies_t *pmovie; 畛 但y amovie l m畛t 畛i t動畛ng c坦 ki畛u movies_t v pmovie l m畛t con tr畛 tr畛 t畛i 畛i t動畛ng movies_t.
  • 42. o畉n m達 tr棚n gi畛i thi畛u m畛t i畛u quan tr畛ng: to叩n t畛 ->. 但y l m畛t to叩n t畛 tham chi畉u ch畛 d湛ng 畛 tr畛 t畛i c叩c c畉u tr炭c v c叩c l畛p (class). N坦 cho ph辿p ch炭ng ta kh担ng ph畉i d湛ng ngo畉c m畛i khi tham chi畉u 畉n m畛t ph畉n t畛 c畛a c畉u tr炭c. Trong v鱈 d畛 ny ch炭ng ta s畛 d畛ng: movies->title n坦 c坦 th畛 動畛c d畛ch thnh: (*movies).title c畉 hai bi畛u th畛c movies->title v (*movies).title 畛u h畛p l畛 v ch炭ng 畛u d湛ng 畛 tham chi畉u 畉n ph畉n t畛 title c畛a c畉u tr炭c 動畛c tr畛 b畛i movies. B畉n c畉n ph但n bi畛t r探 rng v畛i: *movies.title n坦 t動董ng 動董ng v畛i *(movies.title) l畛nh ny d湛ng 畛 t鱈nh to叩n gi叩 tr畛 動畛c tr畛 b畛i ph畉n t畛 title c畛a c畉u tr炭c movies, trong tr動畛ng h畛p ny (title kh担ng ph畉i l m畛t con tr畛) n坦 ch畉ng c坦 箪 ngh挑a g狸 nhi畛u
  • 43. c叩c k畉t h畛p c坦 th畛 動畛c gi畛a con tr畛 v c畉u tr炭c
  • 44. 10. B畛 nh畛 畛ng B畛 nh畛 t挑nh B畛 nh畛 畛ng To叩n t畛 new To叩n t畛 delete
  • 45. B畛 nh畛 t挑nh B畛 nh畛 t挑nh (stack) V湛ng nh畛 動畛c s畛 d畛ng 畛 l動u tr畛 c叩c bi畉n ton c畛c v l畛i g畛i hm T畉t c畉 nh畛ng ph畉n b畛 nh畛 ch炭ng ta c坦 th畛 s畛 d畛ng l c叩c bi畉n c叩c m畉ng v c叩c 畛i t動畛ng kh叩c m ch炭ng ta 達 khai b叩o. K鱈ch c畛 c畛a ch炭ng l c畛 畛nh v kh担ng th畛 thay 畛i trong th畛i gian ch動董ng tr狸nh ch畉y
  • 46. B畛 Nh畛 畛ng B畛 nh畛 畛ng (heap) B畛 nh畛 m k鱈ch c畛 c畛a n坦 ch畛 c坦 th畛 動畛c x叩c 畛nh khi ch動董ng tr狸nh ch畉y Hai to叩n t畛 動畛c s畛 d畛ng new: c畉p ph叩t delete: thu h畛i void Foo (void) { int *ptr = new int; char *str = new char[10]; //... delete ptr; delete [ ]str; } Ch動董ng 5
  • 47. To叩n t畛 new v new[ ] D畉ng th畛c c畛a to叩n t畛 ny nh動 sau: pointer = new type ho畉c pointer = new type [elements] Bi畛u th畛c 畉u ti棚n 動畛c d湛ng 畛 c畉p ph叩t b畛 nh畛 ch畛a m畛t ph畉n t畛 c坦 ki畛u type. L畛nh th畛 hai 動畛c d湛ng 畛 c畉p ph叩t m畛t kh畛i nh畛 (m畛t m畉ng) g畛m c叩c ph畉n t畛 ki畛u type
  • 48. V鱈 d畛: int * bobby; bobby = new int [5]; trong tr動畛ng h畛p ny, h畛 i畛u hnh dnh ch畛 cho 5 ph畉n t畛 ki畛u int trong b畛 nh畛 v tr畉 v畛 m畛t con tr畛 tr畛 畉n 畉u c畛a kh畛i nh畛. V狸 v畉y l炭c ny bobby tr畛 畉n m畛t kh畛i nh畛 h畛p l畛 g畛m 5 ph畉n t畛 int.
  • 49. To叩n t畛 delete D畉ng th畛c c畛a n坦 nh動 sau: delete pointer; ho畉c delete [ ] pointer; Bi畛u th畛c 畉u ti棚n n棚n 動畛c d湛ng 畛 gi畉i ph坦ng b畛 nh畛 動畛c c畉p ph叩t cho m畛t ph畉n t畛 L畛nh th畛 hai d湛ng 畛 gi畉i ph坦ng m畛t kh畛i nh畛 g畛m nhi畛u ph畉n t畛 (m畉ng)
  • 50. T畉o gi叩 tr畛 cho m畛t m畉ng 畛ng v in m畉ng l棚n mn h狸nh #include <iostream.h> #include <conio.h> #include <stdlib.h> void main(void) { long int num,i; int* arr; clrscr(); cout <<"n SPT";cin >>num; if (num>0) { arr=new int[num]; if (arr!=NULL) { randomize(); for (i=0;i<num;i++) arr[i]=random(100); for (i=0;i<num;i++) cout <<*(arr+i)<<" "; delete(arr); } else cout <<K du bo nho"; } getch(); }
  • 52. NULL Null l m畛t h畉ng s畛 動畛c 畛nh ngh挑a trong th動 vi畛n C++ d湛ng 畛 bi畛u th畛 con tr畛 null. Trong tr動畛ng h畛p h畉ng s畛 ny ch動a 動畛c 畛nh ngh挑a, b畉n c坦 th畛 t畛 畛nh ngh挑a n坦 C炭 ph叩p: #define NULL 0
  • 53. B畛 nh畛 畛ng trong ANSI-C To叩n t畛 new v delete l 畛c quy畛n c畛a C++ v ch炭ng kh担ng c坦 trong ng担n ng畛 C. Trong ng担n ng畛 C, 畛 s畛 d畛ng b畛 nh畛 畛ng ph畉i s畛 d畛ng th動 vi畛n stdlib.h. C叩ch ny c滴ng h畛p l畛 trong C++ v n坦 v畉n 動畛c s畛 d畛ng trong m畛t s畛 ch動董ng tr狸nh.
  • 54. Hm malloc: C畉p ph叩t b畛 nh畛 畛ng cho con tr畛 void * malloc (size_t nbytes); Hm calloc: Gi畛ng malloc void * calloc (size_t nelements, size_t size); Hm realloc: Thay 畛i k鱈ch th動畛c kh畛i nh畛 達 動畛c c畉p ph叩t cho con tr畛 void * realloc (void * pointer, size_t size); Hm realloc: Gi畉i ph嘆ng m畛t kh畛i nh畛 畛ng 達 動畛c c畉p ph叩t b畛i malloc, calloc ho畉c realloc. void free (void * pointer);