Ngôn ngữ lập trình C và C++
lượt xem 18
download
Tham khảo tài liệu 'ngôn ngữ lập trình c và c++', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Ngôn ngữ lập trình C và C++
- “Ngôn ngữ lập trình C và C++” Nguyễn Trường Giang Chương 7*: Một số chủ đề nâng cao 7*.1. Con trỏ a) Con trỏ null: − Là con trỏ mà không trỏ tới đâu cả. − Không thể sử dụng toán tử * để lấy giá trị của con trỏ null. Nếu làm như vậy thì dẫn tới lỗi run-time. − Con trỏ null có ích khi dùng trong danh sách liên kết (linked-list) hoặc hàm sẽ trả về con trỏ null trong trường hợp hàm có lỗi (với hàm trả về một con trỏ). b) Con trỏ void: − Trỏ tới một kiểu chưa xác định. − Người ta cũng không thể lấy giá trị của con trỏ void hoặc sử dụng toán tử số học với nó nhưng nó có thể dễ dàng chuyển thành con trỏ thuộc kiểu khác. c) Con trỏ trỏ tới con trỏ: (pointer to pointer): Là con trỏ chứa địa chỉ của con trỏ khác int i = 5, j = 6; k = 7; int *ip1 = &i, *ip2 = &j; int **ipp; // Con trỏ trỏ tới con trỏ ipp = &ip1; *ipp = ip2; *ipp = &k; 7*.2. Tham chiếu: − Bản chất: Là tạo ra bí danh cho một đối tượng khác − Cú pháp: Kiểu &biến; Ví dụ: 1
- “Ngôn ngữ lập trình C và C++” Nguyễn Trường Giang int i; int &ir = i; // đặt ir là bí danh của i – là cách gọi khác cho biến i Thay vì gán i = 8; có thể viết ir = 8; − So sánh tham chiếu và con trỏ o Giống: Đều chứa địa chỉ của biến Ví dụ: Gọi hàm: swap2(int &a, int &b) { int t=a; a=b; b=t; int x,y; swap2(x, y); } hoặc int &dx = x, &dy = y; swap2(dx, dy); o Khác: Tham chiếu phải được khởi tạo (trỏ tới 1 biến), con trỏ có thể trỏ đến NULL. Con trỏ có thể thay đổi địa chỉ trỏ tới, còn tham chiếu thì không. 7*.3. Quản lý bộ nhớ: − C cung cấp 3 cách riêng biệt để cấp phát bộ nhớ cho các đối tượng. o Cấp phát tĩnh: Không gian nhớ cho các đối tượng (biến, hằng, hàm v.v.) được cung cấp vào thời điểm biên dịch. Những đối tượng này sẽ tồn tại chừng nào phần đoạn mã nhị phân chứa chúng còn tồn tại. o Cấp phát tự động: các đối tượng có thể được lưu trữ vào các stack. Không gian nhớ này được tự động giải phóng và tái sử dụng sau khi khối câu lệnh sử dụng chúng không còn tác dụng nữa. o Cấp phát động: Các khối nhớ với kiểu mong muốn có thể được yêu cầu vào thời điểm chạy sử dụng các hàm trong thư viện như malloc() từ một vùng nhớ được gọi là heap. Những khối nhớ này sẽ được sử dụng tái sử dụng sau khi hàm thư viện free được gọi. − Những cách tiếp cận này là phù hợp trong những tình huống khác nhau. − Cấp phát tự động hoặc cấp phát tĩnh thường hay được sử dụng vì việc lưu trữ được trình biên dịch quản lý, giúp lập trình viên tránh khỏi những sai sót dễ gặp phải khi phải tự mình cấp phát và giải phóng bộ nhớ. − Ví dụ: Cấp phát sử dụng malloc và free. 2
- “Ngôn ngữ lập trình C và C++” Nguyễn Trường Giang o Cấp phát động cho mảng 1 chiều: scanf("%d", &n); int memsize = n*sizeof(int); if ( (arr = (int *)malloc(memsize) ) == NULL ) { printf("Khong cap phat duoc bo nho"); exit(1); } //... free(arr); o Cấp phát động cho mảng 2 chiều: float **ptr; int m,n,i; //Khởi tạo mảng ptr[m][n] //Khởi tạo chiều thứ nhất của mảng ptr=(float **)malloc(m*sizeof(*ptr)); for(i=0;i
- “Ngôn ngữ lập trình C và C++” Nguyễn Trường Giang int GetMax2(int *arr, int n) { int i; int max = *arr; for(i=1; i
- “Ngôn ngữ lập trình C và C++” Nguyễn Trường Giang e) Hàm trả về một xâu ký tự: − Ví dụ 1: char *month_name(int n) { static char *name[] = { "Illegal month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; return (n < 1 || n > 12) ? name[0] : name[n]; } − Ví dụ 2: char *itoa(int n) { char retbuf[25]; sprintf(retbuf, "%d", n); return retbuf; } // SAI char *itoa(int n) { char *retbuf = malloc(25); if(retbuf == NULL) return NULL; sprintf(retbuf, "%d", n); return retbuf; } // ĐÚNG char *itoa(int n) { static char retbuf[25]; sprintf(retbuf, "%d", n); return retbuf; } // ĐÚNG char *itoa(int n, char buf[]) { sprintf(buf, "%d", n); return buf; } // ĐÚNG 5
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Ngôn ngữ lập trình C++và cấu trúc dữ liệu part 1
27 p | 284 | 72
-
ngôn ngữ lập trình c và c++ (bài giảng, bài tập, lời giải mẫu)
287 p | 275 | 68
-
Ngôn ngữ lập trình C++và cấu trúc dữ liệu part 2
27 p | 130 | 45
-
Ngôn ngữ lập trình C++và cấu trúc dữ liệu part 3
27 p | 95 | 34
-
Ngôn ngữ lập trình C++và cấu trúc dữ liệu part 4
27 p | 121 | 34
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 1: Ngôn ngữ lập trình C) - Chương 1: Ôn tập một số nội dung chính của NNLT C
31 p | 157 | 13
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 5 - TS. Đỗ Đăng Khoa
63 p | 100 | 8
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 1 - TS. Đỗ Đăng Khoa
53 p | 112 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 5: Các lớp nhập/xuất trong C++
19 p | 132 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ C++) - Chương 2: Giới thiệu về ngôn ngữ lập trình C++
49 p | 137 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 3 - TS. Đỗ Đăng Khoa
41 p | 79 | 6
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 3: Lớp và đối tượng
52 p | 112 | 5
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 2 - TS. Đỗ Đăng Khoa
43 p | 65 | 5
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 4 - TS. Đỗ Đăng Khoa
40 p | 95 | 5
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 6 - TS. Đỗ Đăng Khoa
63 p | 46 | 4
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 6: Mẫu (template)
27 p | 85 | 4
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 7 - TS. Đỗ Đăng Khoa
23 p | 51 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn