Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
498,5 KB
Nội dung
Trường Đại Học Bách Khoa Hà Nội Viện: Điện Tử - Viễn Thông Bộ Môn: Điện tử - Kỹ thuật máy tính Ngôn ngữ lập trình C/C++ Chương 1: Ôn tập Ngôn ngữ lập trình C Cấu trúc liệu mảng trỏ Các nội dung Kiểu mảng Kiểu trỏ Mối quan hệ hai kiểu DL Cấp phát nhớ động Kiểu mảng 1.1 Giới thiệu Một đối tượng liệu kiểu mảng có đặc trưng sau: Số chiều : giá trị nguyên dương cố định nên biểu diễn số nguyên dương Kích thước chiều : giá trị nguyên dương cố định nên biểu diễn số nguyên dương Kiểu phần tử mảng : kiểu liệu phần tử (kiểu mảng) Kiểu mảng Các thao tác đối tượng liệu kiểu mảng gồm có: Khai báo : xác định đặc trưng mảng số chiều, kích thước chiều, kiểu mảng Truy nhập vào phần tử mảng: theo hai cách : Truy nhập gián tiếp: cách sử dụng số Truy nhập trực tiếp: thông qua trỏ Kiểu mảng 1.2 Mảng chiều a) Khai báo - Khai báo biến mảng: với cú pháp sau: kiểu_dữ_liệu tên_biến [N] ; kiểu_dữ_liệu tên_biến [N] = {v1,v2,…,vn}; kiểu_dữ_liệu tên_biến [] = {v1,v2,…,vn}; Trong đó: N phải số nguyên dương v1,v2,…,vn giá trị khởi tạo tương ứng cho phần tử mảng 1.Kiểu mảng - Mảng chiều VD : char s[20]; char s[10] = {’s’,’t’,’r’,’i’,’n’,’g’}; char s[10] = “string”; char s[10] = {’s’,’t’,’r’,’i’,’n’,’g’,’\0’}; int a[10] = {1,2,3}; int a[10] = {1,2,3,0,0,0,0,0,0,0}; int a[] = {1,2,3}; int a[3] = {1,2,3}; int a[] ; //error 1.Kiểu mảng - Mảng chiều - Khai báo mảng: với cú pháp sau: const kiểu_dữ_liệu tên_biến [N] = {v1,v2,…,vn}; kiểu_dữ_liệu const tên_biến [] = {v1,v2,…,vn}; Hằng mảng mảng số, tức tất phần tử mảng số Việc khởi tạo giá trị ban đầu cho phần tử khai báo bắt buộc VD: const int a[3] = {1,2,3}; a[1] = ; //error 1.Kiểu mảng Mảng chiều b) Truy nhập Trong phần xét phương pháp truy nhập gián tiếp thông qua số - Chỉ số phần tử : Sau khai báo đối tượng liệu mảng, phần tử mảng có số hiệu gọi số phần tử Chỉ số vừa có vai trò tên gọi, vừa có vai trò xác định địa tương đối phần tử mảng - Cách đánh số: C/C++ quy ước phần tử thứ i (1≤ i ≤ N) mảng có số i-1 Tức phần tử có số 0, phần tử thứ N có số N-1 - Truy nhập số: để truy nhập vào phần tử có số i ta dùng cú pháp tên_mảng[i] VD : chương trình xếp dãy N số theo trật tự tăng dần giải thuật xếp bọt main(){ const int N = 200 ; float a[N] ; int i,j ; …Nhập giá trị cho mảng a ; for (i=0;iname); p->age = 20; 23 Phép tăng/giảm địa Đó phép toán (+,-, ++, ) biến trỏ char st[10]; char * ps = st; ps = ps +2; //ps = &st[0]; //ps = &st[2]; int si[10]; int * pi = &si[1]; pi++; //pi = &si[2]; pi = pi - 2; //pi = &si[0]; 24 Mối quan hệ mảng trỏ Bản thân mảng trỏ, trỏ đến dãy phần tử mảng Nó trỏ (như gán cho tên mảng, không thực phép tăng/giảm địa chỉ) Biến trỏ dùng để truy nhập vào phần tử mảng giống mảng 25 Mối quan hệ mảng trỏ char s[5]; char * ps = s; //ps = &st[0]; ps = ps +2; //ps = &st[2]; s++; //Error s ps 26 Cấp phát động nhớ Thư viện cung cấp số hàm để quản lý vùng nhớ động: Hàm malloc(): có định dạng hàm void * malloc(int size); Hàm cấp phát vùng nhớ động kích thước size, trả địa ngăn nhớ vùng nhớ Hàm trả NULL cấp phát không thành công Hàm calloc(): void * calloc(int nItems, int size_item); Cấp phát vùng nhớ kích thước nItems * size_item Hàm realloc(): void* realloc(void* block, int new_size); Cấp phát lại vùng nhớ kích thước new_size cho vùng nhớ cũ block, có copy liệu từ vùng nhớ cũ sang vùng nhớ Hàm free(): có định dạng hàm void free (void * p); Hàm giải phóng vùng nhớ động cấp phát địa p 27 Ví dụ #include #include //#define N 10 int main(){ int i; int N; scanf(“%d”,&N); //Cap phat bo nho dong cho bien p int *p = (int*)malloc(N*sizeof(int)); if (p==NULL) { printf("Error allocating memory"); return 0; } 28 for (i=0;i