1. Trang chủ
  2. » Công Nghệ Thông Tin

PHƯƠNG PHÁP LẬP TRÌNH_5 pdf

37 169 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Chương 5 Con Trỏ (Pointers)
Trường học Trường Đại học Bách Khoa Hà Nội
Chuyên ngành Khoa học Máy Tính
Thể loại Báo cáo môn học
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 37
Dung lượng 646,49 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

type: xác định kiểu dữ liệu của biến màtype: xác định kiểu dữ liệu của biến mà con trỏ trỏ đến... Cong y ; qtrỏ này chỉ đến vùng nhớ cách vùng nhớ củacon trỏ hiện tại một số nguyên lần k

Trang 1

CHƯƠNG 5 CON TRỎ

(Pointers)

Trang 2

1 Giới thiệu

nhớ Địa chỉ này là vị trí của một đối tượngkhác trong bộ nhớ

biến thứ nhất được gọi là trỏ đến biến thứ hai

Trang 3

1 Giới thiệu

Địa chỉ ị Biến trong

bộ nhớ bộ nhớ Một biến được cấp phát ô

nhớ tại địa chỉ 1000 có giá trị là địa chỉ (1003) của 1 biến khác Biến thứ nhất được gọi là con trỏ.

Bộ nhớ

Trang 4

type: xác định kiểu dữ liệu của biến mà

type: xác định kiểu dữ liệu của biến mà con trỏ trỏ đến

Ví dụ:

int *a;

a

Trang 5

3 Toán t

3 Toán tử ử con tr con trỏ ỏ (( (( pointer operators p p p p )) ))

y Toán tử & là toán tử 1 ngôi, trả về địa chỉ bộ nhớ của toán hạng của nó

◦ Toán tử & dùng để gán địa chỉ của biến cho biến con trỏ

Cú pháp: p p

<Tên biến con trỏ>=&<Tên biến>

Trang 7

3 Toán t

3 Toán tử ử con tr con trỏ ỏ (( pointer operators ))

3 Toán t

3 Toán tử ử con tr con trỏ ỏ (( pointer operators ))

y Toán tử * : là toán tử một ngôi trả về giá trị tại địa chỉ con trỏ trỏ đến

*<Tên biến con trỏ>

Trang 8

4 Các thao tác trên con trỏ

Có thể dùng phép gán để gán giá trị của mộtcon trỏ cho một con trỏ khác có cùng kiểu

Trang 9

4 Các thao tác trên con trỏ

phép cộng và trừ

◦ Khi cộng (+) hoặc trừ (-) 1 con trỏ với 1 sốnguyên N; kết quả trả về là 1 con trỏ Cong y ; qtrỏ này chỉ đến vùng nhớ cách vùng nhớ củacon trỏ hiện tại một số nguyên lần kích

thước của kiểu dữ liệu của nó

Trang 10

4 Các thao tác trên con trỏ

a = a + 1;//con trỏ a dời đi 1 byte

b = b + 1;//con trỏ b dời đi 2 byte

c = c + 1; //con trỏ c dời đi 4 byte

Trang 11

4 Các thao tác trên con trỏ

Trang 12

y Lưu ý: cả hai toán tử tăng (++) và giảm ( )

đều có quyền ưu tiên lớn hơn toán tử *

Ví dụ: *p++;

Lệnh *p++ tương đương với *(p++) : thực

hiện là tăng p (địa chỉ ô nhớ mà nó trỏ tới

chứ không phải là giá trị trỏ tới)

Trang 13

4 Các thao tác trên con trỏ

Trang 14

4 Các thao tác trên con trỏ

#include <iostream.h>

#include<conio h>

void main ()

{

int a = 20, b = 15, *pa, *pb, temp;

pa = &a; // con trỏ pa chứa địa chỉ của a

pb = &b; // con trỏ pb chứa địa chỉ của b

Trang 15

một hệ thống được định nghĩa bởi C và mộtđược định nghĩa bởi C++.

Trang 16

5 Cấp phát bộ nhớ động

y Cấp phát động được định nghĩa bởi C

phát động các khối bộ nhớ trong thời gianthực thi chương trình Gọi là bộ nhớ động

và thu hồi bộ nhớ, trong thư viện stdlib.h

Trang 17

void, do đó có thể gán nó cho con trỏ có, gkiểu bất kỳ.

trả về địa chỉ của byte đầu tiên của vùngnhớ được cấp phát từ heap Nếu khôngthành công (không có đủ vùng nhớ rỗi yêug ( g g ycầu), hàm malloc() trả về null

Trang 18

5 Cấp phát bộ nhớ động

y Ví dụ:

char *p;

p = (char *) malloc(1000); //cấp phát 1000 bytes

Vì hàm malloc() trả về con trỏ kiểu void, nên() ,

phải ép kiểu (casting) nó thành con trỏ char

cho phù hợp với biến con trỏ p

Trang 20

cấp phát thành công hay không.

Ví dụ:

p = (int *)malloc(100);

if(p == NULL) {{

cout << "Khong du bo nho";

exit(1);

}

Trang 21

5 Cấp phát bộ nhớ động

y Hàm free(): Trả về vùng nhớ được cấp phát bởi hàm malloc()

y Cú pháp:

void free(void *p);

p là con trỏ đến vùng nhớ đã được cấp phát trước đó bởi hàm malloc()

Trang 22

5 Cấp phát bộ nhớ động

y Cấp phát động được định nghĩa bởi C++

C++ cung cấp hai toán tử cấp phát bộ nhớ

động: new và delete.

Toán tử new cấp phát bộ nhớ và trả vềmột con trỏ đến byte đầu tiên của vùng nhớộ y gđược cấp phát

Toán tử delete thu hồi vùng nhớ được cấpg ợ pphát trước đó bởi toán tử new

Trang 23

5 Cấp phát bộ nhớ động

y Cú pháp:

p = new type;

delete p; p

tượng có kiểu là type

Trang 24

}

Trang 25

6 Con trỏ void (( void pointers ))

6 Con trỏ void (( void pointers ))

y Con trỏ void là một lọai con trỏ đặc biệt mà

Trang 26

6 Con trỏ void (( void pointers ))

6 Con trỏ void (( void pointers ))

y Kiểu dữ liệu khi khai báo biến con trỏ chính là

Trang 27

6 Con trỏ void (( void pointers ))

6 Con trỏ void (( void pointers ))

◦ Nếu p đang trỏ đến biến nguyên a, để tăng

giá trị của biến a lên 10 ta phải dùng lệnh sau:

(int*)*p + 10;

(int*)*p + 10;

◦ Nếu p đang trỏ đến biến thực f, để tăng giá trị của biến f lên 10 ta phải dủng lệnh sau:trị của biến f lên 10 ta phải dủng lệnh sau:

(float*)*p + 10;

Trang 28

7 Con trỏ null ( Null pointers ))

7 Con trỏ null ( Null pointers ))

chỉ bộ nhớ hợp lệ thì được gán giá trị NULL

y NULL được định nghĩa trong <cstdlib>

Ví dụ:

#include <iostream.h>

void main()

{ int *p;

cout <<“Gia tri con tro p tro den la: “<< *p; }

x Kết quả của chương trình trên là:

NULL POINTER ASSIGNMENT

Trang 29

phần tử đầu tiên của nó, tương tự một con

trỏ tương đương với địa chỉ của phần tử đầutiên mà nó trỏ tới

Trang 32

8 Con trỏ và mảng

y Truy cập các phần tử mảng bằng con trỏ

Kiểu mảng Kiểu con trỏ

&<Tên mảng>[0] <Tên con trỏ >

& Tê ả [ Vị t í ] Tê t ỏ Vị t í

&<Tên mảng> [<Vị trí>] <Tên con trỏ> + <Vị trí>

<Tên mảng>[<Vị trí>] *(< Tên con trỏ > + <Vị trí>)

Trang 33

cout << numbers[n] << ", "; }

Trang 35

*(p+i) *= 10; //tuong duong a[i] a[i]*10

*(p+i) *= 10; //tuong duong a[i] = a[i]*10 cout << “a[“ << i << “] = “ << *(p+i) << ”\n”; }

}

Ngày đăng: 27/06/2014, 11:20