Bài giảng Chương 3: Vài kiến thức nâng cao về C, C++

40 7 0
Bài giảng Chương 3: Vài kiến thức nâng cao về C, C++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Mời các bạn cùng tham khảo Bài giảng Chương 3: Vài kiến thức nâng cao về C, C++ để nắm bắt được những nội dung về mảng, con trỏ, bộ nhớ động–Dynamic memory. Đây là bài giảng tham khảo hữu ích dành cho các bạn đang học chuyên ngành Công nghệ thông tin.

Chương III Vài kiến thức nâng cao C, C+ + 3.1 Mảng • Là dãy hữu hạn phần tử liên tiếp có kiểu tên • Có thể hay nhiều chiều, C khơng giới hạn số chiều mảng • Khai báo theo syntax sau : DataType ArrayName [size]; Or DataType ArrayName [Size1][Size2] [Sizen]; • Khởi tạo giá trị cho mảng theo cách – C1.Khi khai báo : float y[5]={3.2,1.2,4.5,6.0,3.6} int m[6][2] = {{1,1},{1,2},{2,1},{2,2},{3,1},{3,2}}; char s1[6] ={‘H’,’a’,’n’,’o’,’i’,’\0’}; hoac char s1[6] = “Hanoi”; char s1[] =“Dai hoc Bach Khoa Hanoi”; L=24 int     [][] ={{1,2,3},{4,5,6}}; – C2 Khai báo gán giá trị cho phần tử mảng Ví dụ : int m[4]; m[0] = 1; m[1] = 2; m[2] = 3; m[3] = 4; 3.2 Con trỏ • Khái niệm : Giá trị biến lưu trữ nhớ MT, truy cập tới giá trị qua tên biến, đồng thời qua địa chúng nhớ • Con trỏ thực chất biến mà nội dung địa đối tượng khác ( Biến, hàm, khơng phải số) • Có nhiều kiểu biến với kích thước khác nhau, nên có nhiều kiểu trỏ Con trỏ int để trỏ tới biến hay hàm kiểu int • Việc sử dụng trỏ cho phép ta truy nhập tới đối tượng gián tiếp qua địa • Trong C, trỏ cơng cụ mạnh, linh hoạt • Khai báo trỏ : • Syntax : dataType * PointerName; Chỉ trỏ • Sau khai báo, ta trỏ NULL, chưa trỏ tới đối tượng • Để sử dụng trỏ, ta dùng toán tử lấy địa & PointerName = & VarName Ví dụ : int a; int *p; a=10; p= &a; • Để lấy nội dung biến trỏ trỏ tới, ta dùng toán tử lấy nội dung * • * PointerName Ví dụ : int i,j, *p; i= 5; j= *p; Gán i=5 100 gán p = & i j 104 p i 102 j 104 p 100 i 102 100 gán J = *p p= & i; *p= j+2; 100 i *p = j+2 102 j 104 100 p 102 i j 104 100 p 100 i 102 j 104 100 p Chú ý • Một trỏ trỏ tới đối tượng kiểu • Tốn tử ngơi * & có độ ưu tiên cao tốn tử số học • Ta viết *p cho moi nơi có đối tượng mà trỏ tới xuất int x = 5, *p; p = & x; => x=x+10; ~ *p = *p+10; • Ta gán nọi dung trỏ cho : hai trỏ trỏ tới đối tượng int x=10, *p, *q; p = &x; q = p; => p q trỏ tới x Các phép toán trỏ • Một biến trỏ cộng trừ với số nguyên n kết trỏ kiểu, địa trỏ tới đối tượng khác nằm cách đối tượng bị trỏ n phần tử • Phép trừ trỏ cho ta khoảng cách ( số phần tử ) trỏ • Khơng có phép cộng, nhân, chia trỏ • Có thể dùng phép gán, so sánh trỏ, cần ý đến tương thích kiểu Ví dụ : char *pchar; short *pshort; long *plong;  sau xác lập địa cho trỏ, : pchar ++; pshort ++; plong ++; địa ban đầu tương ứng trỏ 100, 200 300, kết ta có giá trị tương ứng : 101, 202 304 tương ứng • Nếu viết tiếp : plong += 5; => plong = 324 pchar -=10; => pchar = 91 pshort +=5; => pshort = 212 • Chú ý : ++ – có độ ưu tiên cao * => *p++ ~ *(p++) tức tăng địa mà trỏ tới khơng phải tăng giá trị mà chứa • *p++ = *q++ tương đương : *p = *q; Vì phép tăng p=p+1; diễn sau khiphép q=q+1; gán thực => Cần dùng dấu () để tránh nhầm lẫn Con trỏ void* • Là trỏ khơng định kiểu (void *).Nó trỏ tới loại biến Thực chất trỏ void chứa địa nhớ mà khơng biết địa có đối tượng kiểu liệu => khơng thể truy cập nội dung đối tượng thông qua trỏ void Để truy cập đối tượng trước hết phải ép kiểu trỏ void trỏ có định kiểu kiểu đối tượng float x; int y; void *p; // khai báo trỏ void p = &x; // p chứa địa số thực x *p = 2.5; // báo lỗi p trỏ void /* cần phải ép kiểu trỏ void trước truy cập đối tượng qua trỏ */ *((float*)p) = 2.5; // x = 2.5 p = &y; // p chứa địa số nguyên y *((int*)p) = 2; // y = //Nhập giá trị ma trận void InputMatrix(int *A,int M,int N,char Symbol) { for(int I=0;I

Ngày đăng: 09/05/2021, 18:45

Tài liệu cùng người dùng

Tài liệu liên quan