Giáo trình C++ - Chương 1: Biến con trỏ

PhÇn 1 : turbo c n©ng cao vµ c++  
Ch−¬ng 1 : BiÕn con trá  
§1. Kh¸i niÖm chung  
Mét con trá lµ mét biÕn chøa ®Þa chØ cña mét biÕn kh¸c. NÕu mét biÕn chøa ®Þa chØ  
cña mét biÕn kh¸c tth× ta nãi biÕn thø nhÊt trá ®Õn biÕn thø hai .  
Còng nh− mäi biÕn kh¸c, biÕn con trá còng ph¶i ®−îc khai b¸o tr−íc khi dïng. D¹ng  
tæng qu¸t ®Ó khai b¸o mét biÕn con trá lµ :  
type *<tªn biÕn>  
Trong ®ã : type lµ bÊt k× kiÓu d÷ liÖu c¬ b¶n thÝch hîp nµo ®−îc chÊp nhËn trong C vµ <tªn  
biÕn> lµ tªn cña mét biÕn con trá. KiÓu d÷ liÖu c¬ b¶n x¸c ®Þnh kiÓu cña nh÷ng biÕn mµ con  
trá cã thÓ chØ ®Õn. VÝ dô khai b¸o biÕn con trá chØ ®Õn c¸c biÕn nguyªn vµ biÕn kiÓu kÝ tù:  
char *p;  
int *x,*y;  
Con trá cã mét trÞ ®Æc biÖt gäi lµ NULL. TrÞ nµy cã nghÜa lµ con trá ch−a trá tíi mét ®Þa chØ  
hîp lÖ nµo c¶. §Ó dïng ®−îc trÞ nµy chóng ta ph¶i dïng #include <stdio.h> ®Çu ch−¬ng  
tr×nh  
§2. C¸c phÐp to¸n vÒ con trá  
C cã hai phÐp to¸n ®Æc biÖt ®èi víi con trá : * vµ & . PhÐp to¸n & lµ phÐp to¸n tr¶ vÒ  
®Þa chØ trong bé nhí cña biÕn sau nã. VÝ dô :  
p = &a;  
sÏ ®Æt vµo biÕn p ®Þa chØ trong bé nhí cña biÕn a. §Þa chØ nµy kh«ng cã liªn quan g× ®Õn trÞ  
sè cña biÕn a. Nãi c¸ch kh¸c ®Þa chØ cña biÕn a kh«ng liªn quan g× ®Õn néi dung cña biÕn a.  
PhÐp to¸n * lµ phÐp to¸n tr¶ vÒ trÞ cña biÕn ®Æt t¹i ®Þa chØ ®−îc m« t¶ bëi biÕn ®i sau  
nã. VÝ dô nÕu biÕn a chøa ®Þa chØ cña biÕn b th×  
p = *a  
sÏ ®Æt trÞ sè cña biÕn b vµo biÕn p  
Ch−¬ng tr×nh 1-1 : LËp ch−¬ng tr×nh in sè 100 lªn mµn h×nh  
main()  
{
int *p,a,b;  
clrscr();  
a=100;  
p=&a;  
b=*p;  
printf("%d",b);  
getch();  
}
§3. TÇm quan träng cña d÷ liÖu khi khai b¸o con trá  
1
CÇn ph¶i b¶o ®¶m lµ con trá lu«n lu«n trá ®Õn mét kiÓu d÷ liÖu phï hîp. VÝ dô khi  
khai b¸o con trá kiÓu int , tr×nh biªn dÞch sÏ hiÓu lµ con trá bao giê còng chØ ®Õn mét biÕn  
cã ®é dµi lµ 2 byte .  
Ta xÐt mét ch−¬ng tr×nh nh− sau  
Ch−¬ng tr×nh 1-2  
main()  
{
float x=10.1,y;  
int *p;  
clrscr();  
p=&x;  
y=*p;  
printf("%f",y);  
getch();  
}
Ch−¬ng tr×nh nµy nh»m g¸n trÞ cña x cho biÕn y vµ in ra trÞ ®ã. Khi biªn dÞch ch−¬ng  
tr×nh kh«ng b¸o lçi mµ chØ nh¾c nhë :  
Suspencious pointer conversion in function main  
Tuy nhiªn ch−¬ng tr×nh kh«ng g¸n trÞ x cho y ®−îc. LÝ do lµ ta khai b¸o mét con trá  
int vµ cho nã trá tíi biÕn float x. Nh− vËy tr×nh biªn dÞch sÏ chØ chuyÓn 2 byte th«ng tin cho  
y chø kh«ng ph¶i 4 byte ®Ó t¹o ra mét sè d¹ng float .  
§4. C¸c biÓu thøc con trá  
1. C¸c phÐp g¸n con trá : Còng gièng nh− bÊt k× mét biÕn nµo kh¸c , ta cã thÓ dïng mét  
con trá ë vÒ ph¶i cña mét phÐp g¸n ®Ó g¸n trÞ cña mét con trá cho mét con trá kh¸c. VÝ dô ta  
viÕt  
Ch−¬ng tr×nh 1-3 :  
main()  
{
int x;  
int *p1,*p2;  
clrscr();  
p1 = &x;  
p2 = p1;  
printf(“ %p”,p2);  
getch();  
}
Ch−¬ng tr×nh nµy hiÖn lªn ®Þa chØ cña biÕn x ë d¹ng hex b»ng c¸ch dïng mét m· ®Þnh  
d¹ng kh¸c cña hµm printf() . %p m« t¶ r»ng sÏ hiÖn lªn mét trÞ chøa trong mét biÕn con trá  
theo d¹ng reg:xxxx víi reg lµ tªn cña mét trong c¸c thanh ghi segment cña CPU cßn xxxx lµ  
®Þa chØ offset tÝnh tõ ®Çu segment .  
2. C¸c phÐp to¸n sè häc cña con trá : Trong C , ta chØ cã thÓ dïng hai phÐp to¸n sè häc t¸c  
®éng lªn con trá lµ phÐp + vµ - . §Ó hiÓu ®−îc c¸i g× sÏ x¶y ra khi thùc hiÖn mét phÐp to¸n  
sè häc lªn con trá ta gi¶ sö p1 lµ mét con trá chØ ®Õn mét sè nguyªn cã ®Þa chØ lµ 2000 . Sau  
khi thùc hiÖn biÓu thøc  
2
p1++ ;  
con trá sÏ chØ ®Õn sè nguyªn n»m ë ®Þa chØ 2002 v× mçi khi t¨ng con trá lªn 1 nã sÏ chØ ®Õn  
sè nguyªn kÕ tiÕp mµ mçi sè nguyªn l¹i cã ®é dµi 2 byte . §iÒu nµy còng ®óng khi gi¶m . VÝ  
dô :  
p1-- ;  
sÏ trá tíi sè nguyªn ë ®Þa chØ 1998 . Nh− vËy mçi khi con trá t¨ng lªn 1 , nã sÏ chØ ®Õn d÷  
liÖu kÕ tiÕp t¹i ®Þa chØ nµo ®ã tuú theo ®é dµi cña kiÓu d÷ liÖu. C cßn cho phÐp céng hay trõ  
mét sè nguyªn víi mét con trá . BiÓu thøc :  
p1 = p1 + 9;  
sÏ lµm cho con trá chØ tíi phÇn tö thø 9 cã kiÓu lµ kiÓu mµ p1 trá tíi vµ n»m sau ph©n tö hiÖn  
thêi nã ®ang trá ®Õn . Ngoµi c¸c phÐp to¸n trªn , con trá kh«ng chÊp nhËn mét phÐp to¸n nµo  
kh¸c .  
3. So s¸nh c¸c con trá : Chóng ta cã thÓ so s¸nh 2 con trá trong mét biÓu thøc quan hÖ . VÝ  
dô cho hai p vµ q , ph¸t biÓu sau ®©y lµ hîp lÖ :  
if (p<q)  
printf(“p tro den mot vi tri bo nho thap hon q\n”);  
Tuy nhiªn cÇn nhí r»ng phÐp to¸n trªn lµ so s¸nh hai ®Þa chØ chøa trong p vµ q chø kh«ng  
ph¶i néi dung cña hai biÕn mµ p vµ q trá tíi .  
4. C¸c vÝ dô vÒ viÖc dïng con trá :  
Ch−¬ng tr×nh 1-4 : Ph©n tÝch ch−¬ng tr×nh sau :  
main()  
{
int i,j,*p;  
i=5;  
p=&i;  
j=*p;  
*p=j+2;  
}
Trong ch−¬ng tr×nh trªn ta khai b¸o hai biÕn nguyªn lµ i vµ j vµ mét biÕn con trá p trá  
tíi mét sè nguyªn . Ch−¬ng tr×nh sÏ ph©n phèi bé nhí cho 3 biÕn nµy vÝ dô t¹i c¸c ®Þa chØ  
100 , 102 vµ 104 v× mçi sè nguyªn dµi 2 byte vµ con trá mÆc nhiªn còng ®−îc m· ho¸ b»ng  
2 byte .  
100  
102  
104  
i
j
p
lÖnh i=5 cho trÞ sè cña biÕn i lµ 5  
100  
102  
104  
5
i
j
p
lÖnh p= &i lµm cho con trá chØ tíi biÕn i nghÜa lµ con trá p chøa ®Þa chØ cña biÕn i . B©y giê  
p chØ ®Õn biÕn i .  
100  
102  
104  
5
i
j
p
100  
3
lÖnh j=*p ®Æt néi dung cña biÕn do p chØ tíi (biÕn i) vµo biÕn j nghÜa lµ g¸n 5 cho j  
100  
102  
104  
5
5
100  
i
j
p
Mét trong nh÷ng vÊn ®Ò lÝ thó khi dïng con trá lµ xem néi dung bé nhí cña m¸y tÝnh  
. Ch−¬ng tr×nh sau ®©y cho phÐp ta vµo ®Þa chØ b¾t ®Çu cña RAM mµ ta muèn kh¶o s¸t vµ  
sau ®ã hiÖn lªn néi dung mçi byte ë d¹ng sè hex . Trong ch−¬ng tr×nh cã tõ kho¸ far dïng  
®Ó tham kh¶o ®Õn c¸c vÞ trÝ kh«ng n»m trong cïng mét segment .  
Ch−¬ng tr×nh 1-5 :  
main()  
{
unsigned long int start;  
char *p;  
int t;  
clrscr();  
printf("Nhap vao dia chi bat dau ma ban muon xem : ");  
scanf("%lu",&start);  
p = (char far *) start;  
for(t=0;;t++,p++)  
if(!(t%16))  
{
printf("%2x\n",*p);  
getch();  
}
}
Trong ch−¬ng tr×nh ta dïng ®Þnh d¹ng %x trong hµm printf() ®Ó in ra sè d¹ng hex .  
Dßng p = (char far *) start; dïng biÕn ®æi sè nhËp vµo thµnh mét con trá .  
§5. Con trá vµ m¶ng  
Trong ch−¬ng tr−íc chóng ta ®· thÊy c¸c vÝ dô vÒ m¶ng . Con trá th−êng ®−îc dïng  
khi xö lÝ m¶ng . Chóng ta xÐt ch−¬ng tr×nh sau :  
Ch−¬ng tr×nh 1-6 :  
main()  
{
int a[10],*pa,x;  
a[0]=11;  
a[1]=22;  
a[2]=33;  
a[3]=44;  
clrscr();  
pa=&a[0];  
x=*pa;  
pa++;  
x=*pa;  
4
x=*pa+1;  
x=*(pa+1);  
x=*++pa;  
x=++*pa;  
x=*pa++;  
}
int a[10] , *pa , x; khai b¸o mét b¶ng gåm 10 phÇn tö kiÓu int , ®−îc liÖt kª lµ  
a[0],a[1],..,a[9] , mét con trá ®Ó chØ ®Õn mét biÕn kiÓu int vµ mét biÕn kiÓu int lµ x.  
a[0] = 11. . .; tõ a[4] ®Õn a[9] ch−a ®−îc khëi g¸n . Nh− vËy chóng sÏ chøa trÞ ngÉu nhiªn  
®· cã t¹i nh÷ng vÞ trÝ bé nhí ®· ph©n phèi cho chóng .  
pa=&a[0]; ®Æt vµo pa ®Þa chØ cña phÇn tö ®Çu tiªn cña m¶ng . BiÓu thøc nµy cã thÓ viÕt ®¬n  
gi¶n lµ pa = a ; v× tªn cña mét m¶ng lu«n lu«n ®−îc tr×nh biªn dÞch coi lµ ®Þa chØ cña phÇn tö  
®Çu tiªn cña m¶ng . Tªn cña m¶ng kh«ng cã chØ sè kÌm theo cã thÓ ®−îc dïng trong ch−¬ng  
tr×nh nh− mét h»ng ®Þa chØ .  
x=*pa; ®Æt néi dung cña biÕn nguyªn mµ pa trá ®Õn vµo (tøc lµ a[0]) vµo x . Nh− vËy x = 11  
pa++; pa ®−îc t¨ng lªn 1 vµ b©y giê trá vµo phÇn tö thø 2 cña m¶ng tøc lµ chøa ®Þa chØ cña  
phÇn tö a[1]  
x=*pa ; pa trá ®Õn phÇn tö a[1] nªn x = 22  
x = *pa +1 ; x =23  
x = *(pa+1) ; tr−íc hÕt pa+1 ®−îc thùc hiÖn , nghÜa lµ pa trá vµo a[2] , sau ®ã néi dung cña  
a[2] ®−îc g¸n cho x nªn x= 33 .Tuy pa tham gia vµo phÐp to¸n nh−ng trÞ sè cña nã kh«ng  
thay ®æi .  
x = *++pa; ++ ®−îc thùc hiÖn tr−íc nªn pa trá tíi a[2] . Sau ®ã trÞ cña a[2] ®−îc g¸n cho x  
nªn x =33  
x= ++*pa; *pa ®−îc thùc hiÖn tr−íc . Do pa chØ ®Õn a[2] nªn *pa=33 vµ ++*pa=34 . Nh−  
vËy x = 34 vµ a[2]=34  
x=*pa++; néi dung cña pa (tøc 34) ®−îc ®Æt vµo x . Sau ®ã nã ®−îc t¨ng lªn 1 nªn chØ vµo  
a[3].  
Ch−¬ng tr×nh 1-7:  
main()  
{
static int num[]={92,81,70,69,58};  
int dex;  
clrscr();  
for(dex=0;dex<5;dex++)  
printf("%d\n",num[dex]);  
getch();  
}
Ch−¬ng tr×nh 1-8 :  
main()  
{
static int num[]={92,81,70,69,58};  
int dex;  
clrscr();  
for(dex=0;dex<5;dex++)  
printf("%d\n",*(num+dex));  
5
getch();  
}
Hai ch−¬ng tr×nh chØ kh¸c nhau ë biÓu thøc : *(num+dex) . C¸ch viÕt nµy t−¬ng  
®−¬ng víi num[dex] .Nãi c¸ch kh¸c truy cËp ®Õn phÇn tö cã chØ sè dex trong m¶ng num .  
Chóng ta hiÓu *(num+dex) nh− sau : ®Çu tiªn num lµ ®Þa chØ cña phÇn tö ®Çu tiªn cña m¶ng  
num vµ ta muèn biÕt trÞ sè cña phÇn tö cã chØ sè dex . V× vËy num+dex sÏ lµ ®Þa chØ cña  
phÇn tö thø dex . *(num+dex) x¸c ®Þnh néi dung cña phÇn tö (num+dex) . Tãm l¹i :  
*(array+index) t−¬ng tù array(index)  
Cã hai c¸ch truy cËp m¶ng lµ :  
theo kÝ hiÖu m¶ng &array[index]  
theo kÝ hiÖu con trá array+index  
Ch−¬ng tr×nh 1-9 : TÝnh nhiÖt ®é trung b×nh b»ng c¸ch dïng con trá  
main()  
{
float temp[40];  
float sum=0.0;  
int num,day=0;  
clrscr();  
do  
{
printf("Cho nhiet do ngay thu %d: ",day+1);  
scanf("%f",temp+day);  
}
while(*(temp+day++)>0);  
num = day-1;  
for(day=0;day<num;day++)  
sum+=*(temp+day);  
printf("Nhiet do trung binh la : %.3f",sum/num);  
getch();  
}
Trong vÝ dô trªn chóng ta ®· dïng biÓu thøc (temp+day) ®Ó truy cËp m¶ng . Tuy nhiªn viÕt  
while((*temp++)>0) v× temp lµ h»ng con trá chø kh«ng ph¶i biÕn con trá . Nh− vËy chØ ®−îc  
phÐp thay ®æi trÞ cña biÕn con trá chø kh«ng ®−îc thay ®æi trÞ cña h»ng con trá . Chóng ta  
viÕt l¹i ch−¬ng tr×nh nh− sau :  
Ch−¬ng tr×nh 1-10 :  
main()  
{
float temp[40];  
float sum=0.0;  
int num,day=0;  
float *p;  
clrscr();  
p=temp;  
do  
{
printf("Cho nhiet do ngay thu %d: ",day+1);  
6
scanf("%f",p);  
day++;  
}
while(*(p++)>0);  
p=temp;  
num=day-1;  
for(day=0;day<num;day++)  
sum+=*(p++);  
printf("Nhiet do trung binh la : %.3f",sum/num);  
getch();  
}
Trong ch−¬ng tr×nh nµy ®Þa chØ cña temp ®−îc ®−a vµo biÕn con trá p . Sau ®ã ta tham kh¶o  
tíi p gièng nh− temp . Ta dïng p trá tíi m¶ng vµ *p lµ néi dung cña ®Þa chØ ®ã . H¬n n· do p  
lµ biÕn con trá nªn ta cã thÓ t¨ng nã b»ng ph¸t biÓu p++.  
§6. Con trá vµ chuçi  
RÊt nhiÒu hµm th− viÖn trong C lµm viÖc víi chuçi theo con trá . VÝ dô hµm strchr()  
tr¶ vÒ con trá trá ®Õn lÇn xuÊt hiÖn ®Çu tiªn cña mét kÝ tù nµo ®ã trong chuçi VÝ dô : ptr =  
strchr(str,’x’)  
th× biÕn con trá ptr sÏ ®−îc g¸n ®Þa chØ cña lÇn xuÊt hiÖn kÝ tù ‘x’ ®Çu tiªn trong chuçi str .  
Sau ®©y lµ ch−¬ng tr×nh cho phÐp ta gâ vµo mét c©u vµ mét kÝ tù cÇn ®Þnh vÞ trong c©u .  
Ch−¬ng tr×nh sÏ cho ta :  
- ®Þa chØ b¾t ®Çu cña chuçi  
- ®Þa chØ cña kÝ tù cÇn ®Þnh vÞ  
- ®é lÖch so víi ®iÓm ®Çu chuçi  
Ch−¬ng tr×nh 1-11 :  
#include<string.h>  
main()  
{
char ch,line[81],*ptr;  
clrscr();  
printf("Cho mot cau : ");  
gets(line);  
printf("Cho ki tu can tim : ");  
ch=getche();  
ptr=strchr(line,ch);  
printf("\nChuoi bat dau tai dia chi %u.\n",line);  
printf("Ki tu xuat hien lan dau tai %u.\n",ptr);  
printf("Do la vi tri %d",(ptr-line+1));  
getch();  
}
Chuçi còng cã thÓ ®−îc khëi t¹o b»ng con trá . Ta xÐt vÝ dô sau  
Ch−¬ng tr×nh 1-11 :  
main()  
{
char *chao="Xin chao !";  
7
char ten[30];  
clrscr();  
printf("Cho ten cua ban : ");  
gets(ten);  
printf(chao);  
puts(ten);  
getch();  
}
Trong ch−¬ng tr×nh trªn ta ®· khëi t¹o chuçi b»ng ph¸t biÓu  
char *chao = “ Xin chao !”  
thay cho  
static char chao[]=” Xin chao !”  
C¶ hai c¸ch ®Òu cho cïng mét kÕt qu¶ . Trong ph−¬ng ¸n dïng con trá , chao lµ biÕn con trá  
nªn cã thÓ thay ®æi ®−îc . VÝ dô ph¸t biÓu :  
puts(++chao)  
sÏ cho kÕt qu¶ : in chao !  
NÕu ta cã mét m¶ng chuçi ta còng cã thÓ dïng m¶ng con trá trá tíi m¶ng chuçi nµy .  
Ta khëi t¹o chóng gièng nh− khëi t¹o biÕn con trá ®¬n .  
Ch−¬ng tr×nh 1-12 :  
#define  
main()  
{
max 5  
int dex;  
int enter=0;  
char name[40];  
static char *list[max]=  
{
"Hung",  
"Ngan",  
"Van",  
"Hoa",  
"Tien"  
};  
clrscr();  
printf("Cho ten cua ban : ");  
gets(name);  
for(dex=0;dex<max;dex++)  
if (strcmp(list[dex],name)==0)  
enter=1;  
if (enter==1)  
printf("Ban da dang ki hoc lop C");  
else  
printf("Ban chua dang ki vao lop");  
getch();  
}
Ph¸t biÓu char *list[max] nãi r»ng list lµ mét m¶ng con trá gåm max phÇn tö chØ tíi  
c¸c kÝ tù . Chóng ta xÐt tiÕp mét vÝ dô nh− sau :  
8
Ch−¬ng tr×nh 1-13 : NhËp vµo mét d·y tªn vµ s¾p xÕp l¹i ®óng thø tù a,b,c  
#define maxnum 38  
#define maxlen 81  
main()  
{
static char name[maxnum][maxlen];  
char *ptr[maxnum];  
char *temp;  
int count = 0;  
int in,out;  
clrscr();  
while (count<maxnum)  
{
printf("Ban cho ten : ");  
gets(name[count]);  
if (strlen(name[count])==0)  
break;  
ptr[count++]=name[count];  
}
for (out=0;out<count-1;out++)  
for (in=out+1;in<count;in++)  
if (strcmp(ptr[out],ptr[in])>0)  
{
temp=ptr[in];  
ptr[in]=ptr[out];  
ptr[out]=temp;  
}
printf("Danh sach da sap xep :\n");  
for(out=0;out<count;out++)  
printf("Ten thu %d : %s\n",out+1,ptr[out]);  
getch();  
}
Ch−¬ng tr×nh nµy dïng c¶ m¶ng chuçi vµ m¶ng con trá chuçi . Con trá n»m trong  
m¶ng ®−îc khai b¸o nh− sau :  
char *ptr[maxnum]  
chuçi n»m trong m¶ng hai chiÒu  
static char name[maxnum][maxlen]  
Do ta kh«ng biÕt mét chuçi dµi bao nhiªu nªn ph¶i dïng m¶ng chuçi name cã tèi ®a  
maxnum phÇn tö , mçi phÇn tö cã maxlen kÝ tù . Khi nhËp chuçi ph¸t biÓu  
ptr[count++] = name[count  
sÏ g¸n ®Þa chØ cña mçi chuçi ®−îc cÊt gi÷ trong m¶ng name[][] vµo phÇn tö con trá ptr . Sau  
®ã m¶ng con trá nµy ®−îc s¾p xÕp dùa trªn m¶ng name[][] nh−¬ng m¶ng name[][] kh«ng  
thay ®æi g× c¶ .  
Ng«n ng÷ C cã thÓ xö lÝ c¸c thµnh phÇn cña m¶ng nh− mét m¶ng . Cô thÓ C cã thÓ  
xem mét dßng cña m¶ng hai chiÒu nh− lµ mét m¶ng mét chiÒu. ®iÒu nµy rÊt tiÖn lîi nh− ta  
®É thÊy trong ch−¬ng tr×nh trªn . C©u lÖnh ptr[count++] = name[count hoµn toµn hîp lÝ v× vÕ  
9
ph¶i chÝnh lµ ®Þa chØ cña m¶ng name[count] vµ m¶ng nµy lµ mét thµnh phÇn cña m¶ng  
name[][] lµ mét m¶ng hai chiÒu . Ta xem l¹i khai b¸o :  
static char name[maxnum][maxlen]  
râ rµng ta cã thÓ xem ®©y lµ mét m¶ng mét chiÒu cã maxnum chuçi vµ tham kh¶o tíi phÇn  
tö cña m¶ng mét chiÒu b»ng 1 chØ sè . VÝ dô :  
name[count] víi count<=maxnum nh− thÕ  
name[0] : ®Þa chØ cña chuçi 1  
name[1] : ®Þa chØ cña chuçi 2  
§7. Con trá trá ®Õn con trá  
Chóng ta cã mét ch−¬ng tr×nh in ra mét b¶ng sè ®−îc viÕt nh− sau :  
Ch−¬ng tr×nh 1-14:  
#define row 4  
#define col 5  
main()  
{
static int table[row][col]={  
{13,15,17,19,21},  
{20,22,24,26,28},  
{31,33,35,37,39},  
{40,42,44,46,48}  
};  
int c=10;  
int i,j;  
clrscr();  
for(i=0;i<row;i++)  
for(j=0;j<col;j++)  
table[i][j]+=c;  
for(i=0;i<row;i++)  
{
for(j=0;j<col;j++)  
printf("%5d",table[i][j]);  
printf("\n");  
}
getch();  
}
Trong ch−¬ng tr×nh trªn ta dïng kÝ hiÖu m¶ng. B©y giê ta muèn viÕt ch−¬ng tr×nh  
dïng kÝ hiÖu con trá thay cho kÝ hiÖu m¶ng. VËy th× lµm thÕ nµo ®Ó m« t¶ table[i][j] b»ng  
con trá . Ta thÊy r»ng :  
- table lµ ®Þa chØ cña phÇn tö ®Çu tiªn cña toµn bé m¶ng , gi¶ ®Þnh lµ 1000  
- do ®©y lµ m¶ng nguyªn nªn mçi phÇn tö chiÕm 2 byte vµ mçi dßng chiÕm 10 byte v×  
cã 5 phÇn tö . Nh− vËy ®Þa chØ cña hai dßng liÒn nhau c¸ch nhau 10 byte  
- do cã thÓ xem mçi dßng lµ mét m¶ng mét chiÒu nªn c¸c m¶ng mét chiÒu liÒn nhau  
c¸ch nhau 10 byte  
- tr×nh biªn dÞch biÕt sè cét trong m¶ng qua khai b¸o nªn nã sÏ hiÓu table+1 lµ ®em  
table ( trÞ 1000 ) céng víi 10 byte thµnh 1010 . T−¬ng tù table+2 cho ta 1020 .  
1000 13 15 17 19 21  
table[0]  
10  
table==1000 1010 20 22 24 26 28  
1020 31 33 35 37 39  
table[1]  
table[2]  
table[3]  
1030 40 42 44 46 48  
§Ó tham kh¶o ®Õn tõng phÇn tö cña dßng tr−íc hÕt ta l−u ý ®Þa chØ cña m¶ng còng lµ  
®Þa chØ cña phÇn tö ®Çu tiªn cña m¶ng . VÝ dô víi m¶ng mét chiÒu a[size] th× a vµ a[0] lµ nh−  
nhau . Trë l¹i m¶ng hai chiÒu ®Þa chØ cña m¶ng mét chiÒu t¹o bëi dßng thø 3 cña m¶ng  
table[][] lµ table[2] hay table+2 .Trong kÝ hiÖu con trá ®Þa chØ cña phÇn tö ®Çu tiªn cña m¶ng  
mét chiÒu nµy lµ &table[2][0] hay *(table+2) . C¶ hai c¸ch viÕt table+2 vµ *(table+2) ®Òu  
tham kh¶o néi dung cña cïng mét « nhí (1020) . NÕu céng 1 vµo table +3 ®Ó cã table+3 th×  
ta nhËn ®−îc ®Þa chØ cña dßng thø 4 trong m¶ng table[][] . NÕu céng 1 vµo *(table+2) ®Ó cã  
*(table+2)+1 th× cã ®Þa chØ cña phÇn tö thø 2 trong dßng thø 3 cña m¶ng table[][] . Tãm l¹i :  
table[i] = *(table+i)  
&table[i] = table+i  
table[i][j] = *(*table+i)+j)  
&table[i][j] = (*(table+i)+j)  
Nh− vËy ch−¬ng tr×nh trªn ®−îc viÕt l¹i nh− sau :  
Ch−¬ng tr×nh 1-15 :  
#define row 4  
#define col 5  
main()  
{
static int table[row][col]={  
{13,15,17,19,21},  
{20,22,24,26,28},  
{31,33,35,37,39},  
{40,42,44,46,48}  
};  
int c=10;  
int i,j;  
clrscr();  
for(i=0;i<row;i++)  
for(j=0;j<col;j++)  
*(*(table+i)+j)+=c;  
for(i=0;i<row;i++)  
{
for(j=0;j<col;j++)  
printf("%5d",*(*(table+i)+j));  
printf("\n");  
}
getch();  
}
Bµi tËp : LËp ch−¬ng tr×nh tÝnh hiÖu ®é dµi hai chuçi nhËp vµo tõ bµn phÝm  
LËp ch−¬ng tr×nh x¸c ®Þnh gi¸ trÞ cùc ®¹i cña n sè nhËp vµo tõ bµn phÝm  
LËp ch−¬ng tr×nh qu¶n lÝ hµng gåm ngµy , l−îng nhËp ,l−îng xuÊt vµ hµng tån kho  
11  
pdf 11 trang Thùy Anh 11580 Free
Bạn đang xem tài liệu "Giáo trình C++ - Chương 1: Biến con trỏ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_c_chuong_1_bien_con_tro.pdf