CHƯƠNG 3 vài KIẾN THỨC NÂNG CAO về c, c++

40 373 0
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

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   m [][] ={{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, 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 • Toán tử * & có độ ưu tiên cao toá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; 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 tăng giá trị mà chứa • *p++ = *q++ tương đương : Vì phép tăng *p = *q; diễn sau khiphép p=p+1; gán thực q=q+1; => 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à địa có đối tượng kiểu liệu => 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[...]... có : char tinhthanh [30 ] =“Da lat”; Tương đương : char *tinhthanh; tinhthanh=“Da lat”; Hoặc : char *tinhthanh =“Da lat”; Ngoài ra các thao tác trên xâu cũng tương tự như trên mảng • *(tinhthanh +3) = “l” • Chú ý : với xâu thường thì không thể gán trực tiếp như dòng thứ 3 Mảng các con trỏ Con trỏ cũng là một loại dữ liệu nên ta có thể tạo một mảng các phần tử là con trỏ theo dạng thức * ... 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’,’’}; hoac char s1[6]... Khoa Hanoi”; L=24 int   m [][] ={{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... 200 30 0, kết ta có giá trị tương ứng : 101, 202 30 4 tương ứng • Nếu viết tiếp : plong += 5; => plong = 32 4 pchar -=10; => pchar = 91 pshort +=5; => pshort = 212 • Chú ý : ++ – có độ ưu tiên cao

Ngày đăng: 11/11/2015, 16:58

Mục lục

    Các phép toán trên con trỏ

    Con trỏ và mảng

    Mảng các con trỏ

    Con trỏ trỏ tới con trỏ

    3.3 Bộ nhớ động – Dynamic memory

    Xin cấp phát bộ nhớ : new va delete

    Giải phóng bộ nhớ

    Dùng bộ nhớ động cho mảng

    CT cộng hai ma trận với mỗi ma trận được cấp phát động

    Dùng tham chiếu với c++