intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Ngôn ngữ lập trình C và C++

Chia sẻ: Nguyen Thanh Huy | Ngày: | Loại File: PDF | Số trang:0

145
lượt xem
18
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ả

Chủ đề:
Lưu

Nội dung Text: Ngôn ngữ lập trình C và C++

  1. “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
  2. “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
  3. “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
  4. “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
  5. “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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2