Professional Documents
Culture Documents
trungtt@soict.hust.edu.vn
Bi 2
C/C++ nng cao
Ni dung
1. Con tr
2. Qun l b nh
3. Hm v tham s
4. a nng ha
1.
Con tr
Pointer
Con tr
Pointer
Khi nim
Gi tr cc bin c lu tr trong b nh my tnh, c th truy
cp ti cc gi tr qua tn bin, ng thi cng c th qua a
ch ca chng trong b nh.
Thc cht l 1 bin m ni dung ca n l a ch ca 1 i
tng khc (bin, hm, nhng khng phi 1 hng s).
Vic s dng con tr cho php ta truy nhp ti 1 i tng
gin tip qua a ch ca n.
C nhiu kiu bin vi cc kch thc khc nhau, nn c
nhiu kiu con tr.
V d: Con tr int tr ti bin hay hm kiu int.
Con tr
Pointer
Khai bo con tr :
Syntax : dataType * PointerName;
Ch rng y l con tr
Sau khi khai bo, ta c con tr NULL (cha tr ti 1 i tng
no)
s dng con tr, ta dng ton t ly a ch &
PointerName = &VarName
V d
int a; int *p; a=10;
p= &a;
ly ni dung bin do con tr tr ti, ta dng ton t ly ni dung *
* PointerName
V d
int i,j,*p; 100 i
i= 5; p= & i; 102 j
j= *p; *p= j+2; 104 p
100 5 i 100 5 i
Gn i=5 gn p = & i
102 j
102 j
104 p 104 100 p
100 5 i
100 7 i
gn j = *p *p = j+2
102 5 j
102 5 j
104 100 p
104 100 p
Ch
Nu vit tip
plong += 5; => plong = 324
pchar -=10; => pchar = 91
pshort +=5; => pshort = 212
Ch
float x; int y;
void *p; // khai bo con tr void
p = &x; // p cha a ch s thc x
*p = 2.5; // bo li v p l con tr void
/* cn phi p kiu con tr void trc khi truy
cp i tng qua con tr */
*((float*)p) = 2.5; // x = 2.5
p = &y; // p cha a ch s nguyn y
*((int*)p) = 2; // y = 2
V d
(float) *p=2.5;
*p= (float *) 2.5;
*(float)p =2.5;
(float *) p =2.5;
(float *) *p=2.5;
*((float *) p )=2.5;
Con tr v
mng
#include <stdio.h>
#include <string.h>
#define MAXHS 50
#define MAXLEN 30
int main () {
int i, j, count = 0; char ds[MAXHS][MAXLEN];
char *ptr[MAXHS], *tmp;
while ( count < MAXHS) {
printf( Vao hoc sinh thu : %d ,count+1);
gets(ds[count]);
if (strlen(ds[count] == 0) break;
ptr[count] = ds +count;
++count;
}
for ( i=0;i<count-1;i++)
for ( j =i+1;j < count; j++)
if (strcmp(ptr[i],ptr[j])>0) {
tmp=ptr[i]; ptr[i] = ptr[j]; ptr[j] = tmp;
}
for (i=0;i<count; i++)
printf(\n %d : %s, i+1,ptr[i]);
}
Con tr
tr ti con tr
Bn thn con tr cng l 1 bin, v vy n cng c a ch v c th
dng 1 con tr khc tr ti a ch .
<Kiu DL> **<Tn bin tr>;
V d: int x = 12;
int *p1 = &x;
int **p2 = &p1;
C th m t 1 mng 2 chiu qua con tr ca con tr theo cng
thc :
M[i][k] = *(*(M+i)+k)
Vi
M+i l a ch ca phn t th i ca mng
*(M+i) cho ni dung phn t trn
*(M+i)+k l a ch phn t [i][k]
Con tr
tr ti con tr
V d: in ra 1 ma trn vung v cng mi phn t
ca ma trn vi 10
#include <stdio.h> for (i=0; i<hang; i++) {
#define hang 3 for (j=0; j<cot; j++) {
#define cot 3
*(*(mt+i)+j)=*(*(mt+i)+j) +10;
int main() {
int mt[hang][cot] = {{7,8,9}, printf( %d , *(*(mt+i)+j);
{10,13,15}, }
{2,7,8}}; printf(\n); }
int i,j; }
for (i=o; i<hang; i++) {
for (j=0; j<cot; j++)
printf( %d , mt[i][j]);
printf(\n);
}
2.
Qun l b nh
Memory management
B nh
ng
Gii phng b nh
delete ptr; // xa 1 bin n
delete [] ptr; // xa 1 bin mng
Xin cp pht b nh
new v delete
#include <stdio.h>
int main() {
int i,n; long total=100,x,*ds;
printf(" Vao so ptu "); scanf(%d,&n);
ds = new long [n];
if (ds==NULL) exit(1);
for (i=0;i<n;i++){
printf("\n Vao so thu %d : ", i+1 );
scanf(%d,&ds[i] );
}
printf(Danh sach cac so : \n);
for (i=0;i<n;i++) printf(%d,ds[i]);
delete []ds;
return 0;
}
B nh ng cho
mng 2 chiu
C C++
int abs(int i); int abs(int i);
long labs(long l); long abs(long l);
double abs(double d);
double fabs(double d);
a nng ha
ton t {C++}
nh ngha li chc nng ca cc ton t c sn
Th hin cc php ton mt cch t nhin hn
C SP Tmp;
Tmp.THUC = C1.THUC+C2.THUC;
Tmp.AO = C1.AO+C2.AO;
return Tmp; }
void DisplaySP(SP C) {
cout <<C.THUC << i <<C.AO; }
a nng ha
ton t {C++}
C php
data_type operator operator_symbol (parameters)
{
}
data_type: Kiu tr v.
operator_symbol: K hiu ca ton t.
parameters: Cc tham s (nu c).
#include <iostream.h>
// nh ngha s phc
typedef struct SP
V d {
double THUC;
cng, tr s };
double AO;
int main() {
SP C1,C2,C3,C4;
C1 = SetSP(1.1,2.0);
C2 = SetSP(-3.0,4.0);
cout<<"\nSo phuc thu nhat:";
DisplaySP(C1);
cout<<"\nSo phuc thu hai:";
DisplaySP(C2);
C3 = C1 + C2; C4 = C1 - C2;
cout<<"\nTong hai so phuc nay:";
DisplaySP(C3);
cout<<"\nHieu hai so phuc nay:";
DisplaySP(C4);
return 0;
}
V d SetSP(double R,double I) {
SP Tmp;
cng, tr s Tmp.THUC = R; Tmp.AO = I; return Tmp; }
C++ SP Tmp;
Tmp.THUC = C1.THUC+C2.THUC;
Tmp.AO = C1.AO+C2.AO;
return Tmp;
}