CHNG1:BINCONTR
§1.KHÁINIMCHUNG
Mtcontrlàmtbinchađachcamtbinkhác.Numtbin
chađachcamtbinkhácthìtanóibinthnht
trđnbinthhai.
Cũngnhmibinkhác,bincontrcũngphiđckhaibáotrc
khidùng.Dngtngquátđkhaibáomtbincontrlà:
type*<tênbin>
Trongđ
ó:typelàbtkìkiudliucbnthíchhpnàođcchpnhn
trongCvà<tênbin>làtêncamtbincontr.Kiudliucbnxác
đnh
kiucanhngbinmàcontrcóthchđn.Vídkhaibáobincon
trchđncácbinnguyênvàbinkiukít:
char*p;
int*x,*y;
Contrcómttrđcbit
gilàNULL.Trnàycónghĩalàcontrchatr
timtđachhplnàoc.Đdùngđctrnàychúngtaphidùng
#include<stdio.h>đuchngtrình
§2.CÁCPHÉPTOÁNVCONTR
C
cóhai phéptoánđcbitđivicontr:*và&.Phéptoán&là
phéptoántrvđachtrongbnhcabinsaunó.Víd:
p=&a;
sđtvàobinpđachtrong
bnhcabina.Đachnàykhôngcóliên
quangìđntrscabina.Nóicáchkhácđachcabinakhôngliên
quangìđnnidungcabina.
main()
{
floatx=10.1,y;
int
*p;
clrscr();
p=&x;
y=*p;
printf(%f,y);
getch();
}
Chngtrìnhnàynhmgántrcaxchobinyvàinratrđó.Khi
biêndchchngtrìnhkhôngbáolimàchnhcnh:
Suspenciouspointerconversioninfunctionmain
Tuynhiênchngtrìnhkhônggántrxchoyđc.Lídolàtakhai
báomtcontrintvàchonótrtibinfloatx.Nhvytrìnhbiêndchs
chchuyn2
bytethôngtinchoychkhôngphi4byteđtoramts
dngfloat.
§4.CÁCBIUTHCCONTR
1. Cácphépgáncontr:Cũnggingnhbtkìmtbinnàokhác
,tacó
thdùngmtcontrvphicamtphépgánđgántrcamt
contrchomtcontrkhác.Vídtavit:
2.
Chngtrình13:
nàycũngđúngkhigim.Víd:
p1
;
strtisnguyênđach1998.Nhvymikhicontrtănglên1,nós
chđndliuktiptiđachnàođótutheođdàicakiudliu.C
còncho
phépcnghaytrmtsnguyênvimtcontr.Biuthc:
p1=p1+9;
slàmchocontrchtiphntth9cókiulàkiumàp1trti
vànm
sauphânthinthinóđangtrđn.Ngoàicácphéptoántrên,contr
khôngchpnhnmtphéptoánnàokhác.
3.Sosánhcáccontr:Chúngtacóthsosánh2contrtrong
mtbiuthc
quanh.Vídchohaipvàq,phátbiusauđâylàhpl:
if(p<q)
printf(“ptrodenmotvitribonhothaphonq\n”);
Tuynhiêncnnhrngphéptoántrênlà
sosánhhaiđachchatrongp
vàqchkhôngphinidungcahaibinmàpvàqtrti.
3
4.Cácvídvvicdùngcontr:
Chngtrình14:Phântíchchngtrìnhsau:
main()
{
inti,j,*p;
5choj
100 5 i
102 5 j
104 100 p
4
Mttrongnhngvnđlíthúkhidùngcontrlàxemnidungb
nhcamáytính.Chngtrìnhsauđâychophéptavàođachbtđu
caRAMmàtamunkhosátvàsauđó
hinlênnidungmibytedng
shex.Trongchngtrìnhcótkhoáfardùngđthamkhođncácvtrí
khôngnmtrongcùngmtsegment.
Chngtrình15:
main()
{
unsignedlongintstart;
char*p;
intt;
clrscr();
printf(Nhapvaodiachibatdaumabanmuonxem:);
scanf(%lu,&start);
p=(charfar*)start;
for(t=0;;t++,p++)
if(!(t%16))
{
printf(%2x\n,*p);
getch();
}
x=*pa++;
}
inta[10],*pa,x; khaibáomtbnggm10phntkiuint,đclitkêlà
a[0],a[1], ,a[9],mt
contrđchđnmtbinkiuintvàmtbinkiu
intlàx.
a[0]=11...;ta[4]đna[9]chađckhigán.Nhvychúngschatr
ngunhiênđãcóti
nhngvtríbnhđãphânphichochúng.
pa=&a[0];đtvàopađachcaphntđutiêncamng.Biuthcnày
cóthvitđnginlàpa=a;vìtênc
amtmngluônluônđctrình
biêndchcoilàđachcaphntđutiêncamng.Têncamngkhông
cóchskèmtheocóthđcdùngtrongchngtrìnhnhmthng
đa
ch.
x=*pa;đtnidungcabinnguyênmàpatrđnvào(tclàa[0])vàox.
Nhvyx=11
pa++;pađctănglên1vàbâygitrvàophntth2ca
mngtclà
chađachcaphnta[1]
x=*pa;patrđnphnta[1]nênx=22
x=*pa+1;x=23
x=*(pa+1);trchtpa+1đcthchin,nghĩa
làpatrvàoa[2],sauđó
nidungcaa[2]đcgánchoxnênx=33.Tuypathamgiavàophéptoán
nhngtrscanókhôngthayđi.
x = *++pa;++đcthchintrcnên
patrtia[2].Sauđótrcaa[2]
Haichng trìnhchkhácnhaubi
uthc: *(num+dex).Cáchvit
nàytngđngvinum[dex].Nóicáchkháctruycpđnphntcóch
sdextrongmngnum.Chúngtahiu*(num+dex)nhsau:đutiênnum
làđachcaphntđu
tiêncamngnumvàtamunbittrsca
phntcóchsdex.Vìvynum+dexslàđachcaphntthdex.
*(num+dex)xácđnhnidungcaphnt
(num+dex).Tómli:
*(array+index)tngtarray(index)
Cóhaicáchtruycpmnglà:
theokíhiumng &array[index]
theokíhiucontr array+index
Chngtrình19:Tínhnhitđtrungbìnhbngcáchdùngcontr
main()
{
floattemp[40];
floatsum=0.0;
intnum,day=0;
clrscr();
do
7
{
printf(Chonhietdongaythu%d:,day+1);
scanf(%f,temp+day);
}
while(*(temp+day++)>0);
num=day1;
p=temp;
num=day1;
for(day=0;day<num;day++)
sum+=*(p++);
printf(Nhietdotrungbinhla:%.3f,sum/num);
getch();
8
}
Trongchngtrìnhnàyđachcatempđcđavàobincontrp.Sau
đótathamkhotipgingnhtemp.Tadùngptrtimngvà*plàni
dungcađach
đó.Hnnado plàbincontrnêntacóthtăngnó
bngphátbiup++.
§6.CONTRVÀCHUI
RtnhiuhàmthvintrongClàmvicvichuitheocon
tr.Víd
hàmstrchr()trvcontrtrđnlnxuthinđutiêncamtkítnào
đótrongchuiVíd:ptr=strchr(str,’x’);thìbincontrptrsđcgánđa
chca
lnxuthinkít‘x’đutiêntrongchuistr.
Sauđâylàchngtrìnhchophéptagõvàomtcâuvàmtkítcnđnh
vtrongcâu.Chngtrìnhschota:
đachbt
đucachui
đachcakítcnđnhv
đlchsoviđimđuchui
gets(ten);
printf(chao);
puts(ten);
getch();
}
Trongchngtrìnhtrêntađãkhitochuibngphátbiu
char*chao=“Xinchao!”
thaycho
staticcharchao[]=”
Xinchao!”
C hai cáchđucho cùng mtktqu. Trong phng án dùng con tr ,
chaolàbincontrnêncóththayđiđc.Vídphátbiu:
puts(++chao)
schoktqu:inchao!
Nutacómtmngchuitacũngcóthdùngmngcontrtrti
mngchuinày.Takhitochúnggingnhkhitobincontrđn.
Chngtrình1
12:
#define max 5
main()
{
intdex;
intenter=0;
charname[40];
staticchar*list[max]=
{
Hung,
Ngan,
char*temp;
intcount=0;
intin,out;
clrscr();
while(count<maxnum)
{
printf(Banchoten:);
gets(name[count]);
if(strlen(name[count])==0)
break;
ptr[count++]=name[count];
}
for(out=0;out<count1;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(Danhsachdasapxep:\n);
11
for(out=0;out<count;out++)
printf(Tenthu%d:%s\n,out+1,ptr[out]);
getch();
}
name[1]:đachca
chui2
§7.CONTRCHĐNCONTR
Chúngtacómtchngtrìnhinramtbngsđcvitnhsau:
Chngtrình114:
#definerow4
#definecol5
main()
{
staticinttable[row][col]={
12
{13,15,17,19,21},
{20,22,24,26,28},
{31,33,35,37,39},
{40,42,44,46,48}
};
intc=10;
inti,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);
Đthamkhođntngphntcadòngtrchttaluýđach
camngcũnglàđachcaphntđutiêncamng.Vídvimng
mt
chiua[size]thìavàa[0]lànhnhau.Trlimnghaichiuđach
camngmtchiutobidòngth3camngtable[][]làtable[2]hay
table+2.Trongkíhiucontrđ
achcaphntđutiêncamngmt
chiunàylà&table[2][0]hay*(table+2).Chaicáchvittable+2và*(table
+2)đuthamkhonidungcacùngmtônh(1020).
Nucng1vào
table+3đcótable+3thìtanhnđcđachcadòngth4trongmng
table[][].Nucng1vào*(table+2)đcó*(table+2)+1thìcóđachca
phntth2trongdòngth3camngtable[][].Tómli:
table[i]=*(table+i)
&table[i]=table+i
table[i][j]=*(*table+i)+j)
&table[i][j]=(*(table+i)+j)
Nhvychngtrìnhtrênđcvitlinhsau:
Chngtrình115:
#definerow
4
#definecol5
main()
{
staticinttable[row][col]={
{13,15,17,19,21},
{20,22,24,26,28},
{31,33,35,37,39},