Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
119,93 KB
Nội dung
Chương 7: Kiểu con trỏ 1 Chương 7 KIỂU CON TRỎ Chương 7: Kiểu con trỏ 2 Nội dung • Khái niệm • Khai báo và sử dụng Chương 7: Kiểu con trỏ 3 Khái niệm • Con trỏ là 1 phần quan trọng trong ngôn ngữ C. • Con trỏ là 1 kiểu dữ liệu đặc biệt, được sử dụng để lưu địa chỉ trong bộ nhớ. • Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, luôn có kích thước cố định là 2 byte. • Việc truyền tham biến cho chương trình con cần thông qua biến con trỏ. • Việc thao tác với dữ liệu sẽ mềm dẻo hơn với con trỏ, chương trình chạy nhanh hơn, Chương 7: Kiểu con trỏ 4 Khai báo con trỏ • Cú pháp: <Kiểu dữ liệu> *<Tên con trỏ>; • Ý nghĩa: – Ki ể u d ữ li ệ u: là ki ể u d ữ li ệ u c ủ a bi ế n (ô nh ớ ) mà con tr ỏ có ý đị nh l ư u tr ữ đị a ch ỉ . – D ấ u * là ký hi ệ u s ử d ụ ng khi khai báo ki ể u con tr ỏ . • Ví dụ: int *p; // con tr ỏ p s ẽ đượ c l ư u tr ữ đị a ch ỉ c ủ a bi ế n nguyên int i; p=&i; // gán đị a ch ỉ c ủ a bi ế n i cho con tr ỏ p • Khi chưa muốn khai báo kiểu dữ liệu ta có thể khai báo void *ptr; Chương 7: Kiểu con trỏ 5 Các thao tác trên con trỏ • Gán địa chỉ của biến cho biến con trỏ <Tên biến con trỏ> = &<Tên biến>; Vd: pa=&a; • nội dung của ô nhớ con trỏ chỉ tới *<Tên biến con trỏ>; Vd: a=5; pa=&a; b=*p; int *p, i=2; p=&i; printf("%d", *p); // in giá trị i scanf("%d", p); // nhập số nguyên vào i Chương 7: Kiểu con trỏ 6 Cấp phát vùng nhớ cho biến con trỏ • void *malloc(<size>); Cấp phát vùng nhớ có kích thước là size. • void *calloc(<nitems>, <size>); Cấp phát vùng nhớ có kích thước là nitems*size. int a, *pa, *pb; pa = (int *) malloc(sizeof(int)); /* C ấ p phát vùng nh ớ có kích th ướ c b ằ ng v ớ i kích th ướ c c ủ a m ộ t s ố nguyên */ pb= (int *)calloc(10, sizeof(int)); /* C ấ p phát vùng nh ớ có th ể ch ứ a đượ c 10 s ố nguyên*/ Chương 7: Kiểu con trỏ 7 Cấp phát vùng nhớ cho biến con trỏ • void *realloc(*<block>, <size>); Cấp phát lại một vùng nhớ cho con trỏ block quản lý, vùng nhớ này có kích thước mới là size; • Giải phóng vùng nhớ: void free(*<block>); Giải phóng vùng nhớ được quản lý bởi con trỏ block. Thư viện hỗ trợ: <malloc.h>, <alloc.h> Chương 7: Kiểu con trỏ 8 Phép toán • Phép gán: int a, *p, *q ; float *f; a = 5; p = &a ; q = p; //đúng f = p; // sai do khác kiểu f = (float*)p; // Đúng nhờ ép kiểu Ép kiểu: (<Kiểu kết quả>*)<Tên con trỏ> Chương 7: Kiểu con trỏ 9 Phép toán • Cộng, trừ con trỏ với 1 số nguyên: giả sử p là con trỏ, k là 1 số nguyên – Phép cộng: p=p+k; • p trỏ sang ô nhớ sau ô nhớ trước đó k ô nhớ – Phép trừ: p= p-k; • P trỏ sang ô nhớ trước ô nhớ trước đó k ô nhớ • Con trỏ NULL: – là con trỏ không chứa địa chỉ nào cả – có thể gán con trỏ NULL cho 1 con trỏ có kiểu bất kỳ Chương 7: Kiểu con trỏ 10 Truyền tham biến cho hàm • Truyền tham biến cho hàm: – Mặc nhiên, trong C chỉ cho phép truyền tham trị. Các giá trị được truyền không bị thay đổi. – Để truyền tham biến cho hàm, thay gì truyền các biến ta hãy truyền địa chỉ của chúng. • Hàm sẽ làm việc trên bản copy của địa chỉ truyền vào • Bản copy và bản gốc cùng trỏ vào 1 biến, do vậy nếu thay đổi nội dung của địa chỉ đó thì kết quả sẽ được giữa lại. [...]... số hình th c của hàm void HoanVi(int *a, int *b) { int c= *a; *a=*b; *b =c; } Chương 7: Kiểu con trỏ 15 Bài tập • Viết chương trình nhập vào một dãy n số nguyên và th c hiện c c yêu c u sau (dùng kiểu con trỏ): – Cho biết c bao nhiêu số chẵn trong dãy, tính tổng c c phần tử chẵn trong dãy – Tìm phần tử chẵn nhỏ nhất (nếu c ) – Viết hàm tìm vị trí phần tử x đầu tiên trong (nếu c ) Nếu x không c trong... ) Chương 7: Kiểu con trỏ 13 ví dụ #include #include #include int main() { int *a; a=(int*)malloc(sizeof(int)*10); for(int i=0;i . Chương 7: Kiểu con trỏ 1 Chương 7 KIỂU CON TRỎ Chương 7: Kiểu con trỏ 2 Nội dung • Khái niệm • Khai báo và sử dụng Chương 7: Kiểu con trỏ 3 Khái niệm • Con trỏ. định là 2 byte. • Việc truyền tham biến cho chương trình con cần thông qua biến con trỏ. • Việc thao tác với dữ liệu sẽ mềm dẻo hơn với con trỏ, chương trình chạy nhanh hơn, Chương 7: Kiểu. trỏ>; Vd: a=5; pa=&a; b=*p; int *p, i =2; p=&i; printf("%d", *p); // in giá trị i scanf("%d", p); // nhập số nguyên vào i Chương 7: Kiểu con trỏ 6 Cấp phát vùng nhớ cho