cơ sở lập trình con trỏ

40 114 0
cơ sở lập trình con trỏ

Đ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

CƠ SỞ LẬP TRÌNH CON TRỎ Nội dung Khái niệm Khai báo Thao tác với trỏ Các phép toán với trỏ Con trỏ mảng Mảng trỏ Con trỏ hàm Khái niệm  Con trỏ (Pointer):  Là biến lưu trữ địa vùng nhớ đối tượng (biến, hàm)  Có tác dụng truyền tham chiếu  Có liên quan chặt chẽ đến mảng chuỗi  Biến trỏ (Pointer variable)  Chứa địa vùng nhớ thay chứa giá trị  Thơng thường, biến chứa giá trị (tham chiếu trực tiếp)  Con trỏ chứa địa biến mang giá trị cụ thể (tham chiếu gián tiếp)  Cần phân biệt nội dung vùng nhớ địa  Ví dụ: pa a FF0024 18 AF0536 FF0024 Khai báo * ; Trong đó, kiểu liệu biến mà trỏ trỏ đến  Ví dụ: int * a; float * b; char * c;  Con trỏ có kiểu liệu với kiểu liệu biến mà trỏ tới  Kích thước biến trỏ tùy thuộc vào OS Thao tác với trỏ Toán tử lấy địa &: Trả địa vùng nhớ biến &x  địa biến x Ví dụ: int x = 10; • Sử dụng trỏ để truy xuất địa biến x • Biến x có địa cụ thể vùng nhớ • Để lấy địa biến x: sử dụng toán tử & trước x (&x) Thao tác với trỏ void main() { int x = 10; int *px; px = &x; printf("Memory address: %d\n",px);//1024 printf("Value of x: %d\n",*px); //10 *px += 10; printf("Value of x: %d\n",x); //20 } Thao tác với trỏ void main() { int x = 10, y = 15; int *px, *py; px = &x; //px = địa x py = &y; //py = địa y *py = 20; //giá trị trỏ py = 20 *px = *py;//gtrị trỏ px= gtrị trỏ py px = py; //phép gán trỏ *px = 30; //giá trị trỏ px = 30 printf(“x = %d\n”,x); printf(“y = %d\n”,y); printf("px = %d, *px = %d\n",px, *px); printf("py = %d, *py = %d\n",py, *py); } Thao tác với trỏ Cần phân biệt *px = *py; //gán giá trị vùng nhớ mà py trỏ đến cho vùng nhớ mà px trỏ đến Với px = py; //sau lệnh px py trỏ đến vùng nhớ Thao tác với trỏ  Con trỏ NULL: • Con trỏ khơng chứa địa vùng nhớ • Nên khởi tạo giá trị NULL địa vùng nhớ cho biến trỏ lúc khai báo Ví dụ: int * p = NULL;  Con trỏ void *: • Tương thích với kiểu liệu mà biến trỏ trỏ đến, gán giá trị trỏ thuộc kiểu cho trỏ void * • Khơng thể thực phép tính số học • Khơng thể (dùng *) lấy liệu VD: void *px,*py; int x=1; float y=0.1; px=&x; py=&y; px+=2; //Error Các phép toán với trỏ Tăng, giảm trỏ (++ ) Cộng, trừ số nguyên với trỏ Con trỏ trừ lẫn (cộng, trừ với trỏ vô nghĩa trừ dùng cho trỏ mảng) Ví dụ: Mảng p có phần tử kiểu int (4 byte) p trỏ đến phần tử p[0], địa 5000 p+=3; //trỏ đến phần tử thứ p[3], địa 5012 p ; //trỏ đến phần tử thứ p[2], địa 5008 10 Cấp phát động  Trong C++, dùng toán tử delete: delete ; delete [] ;  Ví dụ: free (pi); delete x; delete [] a; 26 Ví dụ cấp phát động mảng chiều #include #include #include #include using namespace std; void randomInit(int* a, int n); void output(int* a, int n); 27 Ví dụ cấp phát động mảng chiều void main() { int* a; int n; cout > n; // a = (int*) calloc(n, sizeof(int)); a = new int [n]; randomInit(a, n); output(a, n); // free(a); delete [] a; } 28 Ví dụ cấp phát động mảng chiều void randomInit(int* a, int n) { for (int i = 0; i < n; i++) a[i] = rand()% 100; } void output(int* a, int n) { for (int i = 0; i < n; i++ ) cout

Ngày đăng: 08/03/2019, 12:52

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

Tài liệu liên quan