bởi admin lúc Mon, Apr 16 '18 11:35 AM | Lần xem 375 | Lần tải 21
  • Download images Lập trình C nâng cao
  • Download images Lập trình C nâng cao
  • Download images Lập trình C nâng cao
  • Download images Lập trình C nâng cao
  • Download images Lập trình C nâng cao
PhÇn 1 : tu
o 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 *
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µ
iÕ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 ®Ç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;
=*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
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
main()
{
int i,j,*p;
1-4 :
Ph©n tÝch ch−¬ng tr×nh sau :
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
i
102
j
104
p
lÖnh i=5 cho trÞ sè cña biÕn i lµ 5
100
5
i
102
j
104
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
5
i
102
j
104
100
p
3
bởi admin lúc Mon, Apr 16 '18 11:35 AM

Gồm 14 chương về các vấn đề nâng cao trong lập trình C như: con trỏ, bàm phím, cursor, truy xuất bộ nhớ, đồ họa, các bài toán vi phân, nội suy, hàm số ,.....


.pdf 769250.pdf
Kích thước: 1.72 mb
Lần tải: 0 lần
Download