Professional Documents
Culture Documents
Phan 2 - Chuong 7 (Con Tro)
Phan 2 - Chuong 7 (Con Tro)
Lp trnh cn bn Ghi ch: Nu cha mun khai bo kiu d liu m con tr ptr ang ch n, ta s dng: void *ptr; Sau , nu ta mun con tr ptr ch n kiu d liu g cng c. Tc dng ca khai bo ny l ch dnh ra 2 bytes trong b nh cp pht cho bin con tr ptr.
b
2 byte
B nh
Lu : Khi gn a ch ca bin tnh cho con tr cn phi lu kiu d liu ca chng. V d sau y khng ng do khng tng thch kiu:
int Bien_Nguyen; float *Con_Tro_Thuc; ... Con_Tro_Thuc=&Bien_Nguyen;
Php gn y l sai v Con_Tro_Thuc l mt con tr kiu float (n ch c th cha c a ch ca bin kiu float); trong khi , Bien_Nguyen c kiu int.
Trang 82
Lp trnh cn bn
clrscr(); printf("\nGia tri cua bien a=%d \nGia tri cua bien b=%d ",a,b); pa=&a; pb=&b; printf("\nNoi dung cua o nho con tro pa tro toi=%d",*pa); printf("\nNoi dung cua o nho con tro pb tro toi=%d ",*pb); *pa=20; /* Thay i gi tr ca *pa*/ *pb=20; /* Thay i gi tr ca *pb*/ printf("\nGia tri moi cua bien a=%d \n Gia tri moi cua bien b=%d ",a,b); /* a, b thay i theo*/ getch(); return 0;
Lu : Khi s dng hm malloc() hay calloc(), ta phi p kiu v nguyn mu cc hm ny tr v con tr kiu void.
Lp trnh cn bn
- Kt qu tr v ca hm l a ch u tin ca vng nh mi. a ch ny c th khc vi a ch c ch ra khi cp pht ban u. V d: Trong v d trn ta c th cp pht li vng nh do con tr pa qun l nh sau: int a, *pa; pa=(int*)malloc(sizeof(int)); /*Cp pht vng nh c kch thc 2 byte*/ pa = realloc(pa, 6); /* Cp pht li vng nh c kch thc 6 byte*/
Ta cng c th p kiu con tr theo c php: (<Kiu kt qu>*)<Tn con tr> Chng hn, v d trn c vit li:
int a, *p, *a ; float *f; a = 5 ; p = &a ; q = p ; /* ng */ f = (float*)p; /* ng nh p kiu*/
b. Cng, tr con tr vi mt s nguyn Ta c th cng (+), tr (-) 1 con tr vi 1 s nguyn N no ; kt qu tr v l 1 con tr. Con tr ny ch n vng nh cch vng nh ca con tr hin ti N phn t. V d: Cho on chng trnh sau:
int *pa; pa = (int*) malloc(20); /* Cp pht vng nh 20 byte=10 s nguyn*/ int *pb, *pc; pb = pa + 7; pc = pb - 3;
5 pb
c. Con tr NULL: l con tr khng cha a ch no c. Ta c th gn gi tr NULL cho 1 con tr c kiu bt k. d. Lu : - Ta khng th cng 2 con tr vi nhau.
Trang 84
Lp trnh cn bn
- Php tr 2 con tr cng kiu s tr v 1 gi tr nguyn (int). y chnh l khong cch (s phn t) gia 2 con tr . Chng hn, trong v d trn pc-pa=4.
Trang 85
Lp trnh cn bn
III.1.2 Truy xut tng phn t ang c qun l bi con tr theo dng mng <Tn bin>[<V tr>] tng ng vi *(<Tn bin> + <V tr>) &<Tn bin>[<V tr>] tng ng vi (<Tn bin> + <V tr>) Trong <Tn bin> l bin con tr, <V tr> l 1 biu thc s nguyn. V d: Gi s c khai bo:
#include <stdio.h> #include <alloc.h> #include <conio.h> int main(){ int *a; int i; clrscr(); a=(int*)malloc(sizeof(int)*10); for(i=0;i<10;i++) a[i] = 2*i; printf("Truy cap theo kieu mang: "); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\nTruy cap theo kieu con tro: "); for(i=0;i<10;i++) printf("%d ",*(a+i)); getch(); return 0; }
Kt qu chng trnh:
III.1.3 Con tr ch n phn t mng Gi s con tr ptr ch n phn t a[i] no ca mng a th: ptr + j ch n phn t th j sau a[i], tc a[i+j] ptr - j ch n phn t ng trc a[i], tc a[i-j] V d: Gi s c 1 mng mang_int, cho con tr contro_int ch n phn t th 5 trong mng. In ra cc phn t ca contro_int & mang_int.
#include <stdio.h>
Trang 86
Lp trnh cn bn
#include <conio.h> #include <alloc.h> int main() { int i,mang_int[10]; int *contro_int; clrscr(); for(i=0;i<=9;i++) mang_int[i]=i*2; contro_int=&mang_int[5]; printf("\nNoi dung cua mang_int ban dau="); for (i=0;i<=9;i++) printf("%d ",mang_int[i]); printf("\nNoi dung cua contro_int ban dau ="); for (i=0;i<5;i++) printf("%d ",contro_int[i]); for(i=0;i<5;i++) contro_int[i]++; printf("\n--------------------------------------------------------"); printf("\nNoi dung cua mang_int sau khi tang 1="); for (i=0;i<=9;i++) printf("%d ",mang_int[i]); printf("\nNoi dung cua contro_int sau khi tang 1="); for (i=0;i<5;i++) printf("%d ",contro_int[i]); if (contro_int!=NULL) free(contro_int); getch(); return 0; }
Kt qu chng trnh
Trang 87
Lp trnh cn bn
Trang 88
Lp trnh cn bn
Trc khi gi hm
Khi gi hm Sau khi gi hm: a=&m; b= &n; Con tr a, b b gii phng Lc ny : *a=m; *b=n; m, n thay i: m=30 n=20
m=20
n=30
m=20
n=30
&m
&n
i ch ta c : a b *a=m=30; *b=n=20;
&m
&n
m=30
n=20
&m
&n Trang 89
Lp trnh cn bn
V. BI TP V.1 Mc tiu
Tip cn vi mt kiu d liu rt mnh trong C l kiu con tr. T , sinh vin c th xy dng cc ng dng bng cch s dng cp pht ng thng qua bin con tr.
V.2 Ni dung
Thc hin cc bi tp chng trc (chng VI : Kiu mng) bng cch s dng con tr.
Trang 90