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

Chương 12: Pointer pot

18 173 0

Đ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

Định dạng
Số trang 18
Dung lượng 1,18 MB

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

Nội dung

CBGD: ThS.Trần Anh Dũng 1Chương 12 1 POINTER KHÁI NIỆM Trong ngôn ngữ C, mỗi biến và chuỗi ký tự đều được lưu trữ trong bộ nhớ và có địa chỉ riêng, địa chỉ này xác định vị trí của chúng

Trang 1

CBGD: ThS.Trần Anh Dũng 1

Chương 12

1

POINTER

KHÁI NIỆM

Trong ngôn ngữ C, mỗi biến và chuỗi ký tự đều được lưu trữ trong bộ nhớ và có địa chỉ riêng, địa chỉ này xác định vị trí của chúng trong bộ nhớ Æ C đưa ra kiểu dữ liệu pointer (tạm dịch là con trỏ) để khai báo cho các biến lưu địa chỉ.

Đây là một kiểu dữ liệu đặc biệt và được sử dụng nhiều trong một chương trình C.

2

Một biến có kiểu pointer có thể lưu được dữ liệu trong nó, là địa chỉ của một đối tượng đang khảo sát.

Biến Chuỗi Hàm

THAO TÁC TRÊN POINTER

3

Có nghĩa là khi khai báo, biến hệ_số_a thì được cấp phát một vùng nhớ trong bộ nhớ máy tính Địa chỉ đầu của vùng nhớ này chính là địa chỉ của biến hệ_số_a: &hệ_số_a

THAO TÁC TRÊN POINTER

Kết quả của phép toán lấy địa chỉ của một biến là một hằng pointer hằng trỏ đến biến đó, địa chỉ hằng này có thể được xem như một giá trị để gán vào biến pointer.

4

Hằng pointer cũng có thể là tên mảng hoặc tên hàm.

Trang 2

THAO TÁC TRÊN POINTER

5

THAO TÁC TRÊN POINTER

6

THAO TÁC TRÊN POINTER

7

THAO TÁC TRÊN POINTER

8

Trang 3

CBGD: ThS.Trần Anh Dũng 3

THAO TÁC TRÊN POINTER

9

THAO TÁC TRÊN POINTER

10

THAO TÁC TRÊN POINTER

11

THAO TÁC TRÊN POINTER

™Có thể cộng, trừ một pointer với một số nguyên (int, long, ).

Kết quả là một pointer.

™Pointer có được từ phép cộng hoặc trừ trên, sẽ chỉ đến một đối tượng mới lệch với đối tượng cũ n phần tử, nếu tính theo byte thì đối tượng cũ lệch với đối tượng mới số byte bằng n lần kích thước byte của kiểu đối tượng mà con trỏ đang trỏ đến.

12

Trang 4

THAO TÁC TRÊN POINTER

13

THAO TÁC TRÊN POINTER

14

THAO TÁC TRÊN POINTER

15

THAO TÁC TRÊN POINTER

Phép trừ giữa hai pointer vẫn là một phép toán hợp lệ, kết quả

là một trị thuộc kiểu int biểu thị khoảng cách (số phần tử) giữa hai pointer đó

16

Trang 5

CBGD: ThS.Trần Anh Dũng 5

THAO TÁC TRÊN POINTER

17

THAO TÁC TRÊN POINTER

18

THAO TÁC TRÊN POINTER

C cho phép khai báo một biến pointer là hằng hoặc đối tượng của

một pointer là hằng Lúc đó, việc gán, hoặc tăng giảm trị lưu

trong pointer hằng là không hợp lệ, hoặc thay đổi đối tượng của

pointer khi pointer được khai báo là chỉ đến một đối tượng hằng

đều bị C báo lỗi

19

THAO TÁC TRÊN POINTER

20

Trang 6

THAO TÁC TRÊN POINTER

21

POINTER VÀ MẢNG

22

POINTER VÀ MẢNG

23

POINTER VÀ MẢNG

24

Trang 7

CBGD: ThS.Trần Anh Dũng 7

POINTER VÀ MẢNG

25

POINTER VÀ MẢNG

Khai báo đối số của hàm, có thể khai báo đối số giả dưới dạng mảng:

int a[]

hoặc có thể khai báo dưới dạng pointer:

int *a

26

ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG

THAM SỐ BIẾN

27

ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG

THAM SỐ BIẾN

28

Trang 8

ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG

THAM SỐ BIẾN

29

ĐỐI SỐ CỦA HÀM LÀ POINTER – TRUYỀN ĐỐI SỐ THEO SỐ DẠNG

THAM SỐ BIẾN

30

HÀM TRẢ VỀ POINTER VÀ MẢNG

31

HÀM TRẢ VỀ POINTER VÀ MẢNG

32

Hàm lon_nhat() trả về một địa chỉ:

¾ Là địa chỉ của một int

¾ Hoặc địa chỉ của một mảng các int Việc sử dụng địa chỉ theo đối tượng nào là do nơi gọi

Trang 9

CBGD: ThS.Trần Anh Dũng 9

HÀM TRẢ VỀ POINTER VÀ MẢNG

33

Pointer được trả qua lệnh return chính

là tên hàm, là địa chỉ đầu mảng.

Đối số thật đưa vào cho hàm là một địa chỉ của một biến int để nhận trị này

CHUỖI KÝ TỰ

34

CHUỖI KÝ TỰ

35

CHUỖI KÝ TỰ

36

Trang 10

CHUỖI KÝ TỰ

Khi nhập trị, hàm này đọc các ký tự đến khi nào gặp ký tự quy định hàng mới (tức ký tự '\n', tức khi ta ấn phím ENTER) thì kết thúc việc nhập

37

Hàm này trả về một pointer trỏ đến chuỗi, pointer này chính là tên mảng, là đối số sau khi gán chuỗi

CHUỖI KÝ TỰ

38

Lệnh gets hiểu Dang Thanh Tin là 1 chuỗi (không có dấu xuống hàng) Lệnh scanf hiểu Dang Thanh Tin là 3 chuỗi (do dấu khoảng trắng)

CHUỖI KÝ TỰ

Để xuất chuỗi, hai hàm thường hay được dùng:

¾ puts()

¾ i tf()

39

¾ printf()

Cả hai hàm có prototype trong file stdio.h.

CHUỖI KÝ TỰ

40

Trang 11

-CBGD: ThS.Trần Anh Dũng 11

CHUỖI KÝ TỰ

41

CHUỖI KÝ TỰ

42

CHUỖI KÝ TỰ

43

Chú ý, nếu chiều dài chuỗi đích không đủ để nhận hết dữ liệu

từ chuỗi nguồn thì C vẫn thực hiện việc gán trị cho chuỗi đích

mà không báo lỗi nào, tuy nhiên chương trình sẽ chạy sai cho

các lệnh dưới hoặc không kết thúc được

CHUỖI KÝ TỰ

44

Trang 12

CHUỖI KÝ TỰ

45

CHUỖI KÝ TỰ

46

CHUỖI KÝ TỰ

47

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG

C cho phép khai báo các biến động, các biến này khi cần thì xin chỗ, không cần thì giải phóng vùng nhớ cho chương trình

sử dụng vào mục đích khác.

Các biến động này được cấp phát trong vùng nhớ heap, là vùng đáy bộ nhớ, và được quản lý bởi các biến pointer

48

Nếu hàm này xin được khối bộ nhớ cần thiết thì chúng sẽ trả

về một pointer trỏ đến đầu khối này Nếu không xin được khối bộ nhớ cần thiết, hàm sẽ về trị là một con trỏ NULL

Trang 13

CBGD: ThS.Trần Anh Dũng 13

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG

49

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG

50

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG

51

MẢNG CÁC POINTER

52

Trang 14

MẢNG CÁC POINTER

53

MẢNG CÁC POINTER

54

MẢNG CÁC POINTER

55

MẢNG CÁC POINTER

56

Trang 15

CBGD: ThS.Trần Anh Dũng 15

MẢNG CÁC POINTER

57

MẢNG CÁC POINTER

58

POINTER CỦA POINTER

59

POINTER CỦA POINTER

60

Trang 16

POINTER CỦA POINTER

61

ĐỐI SỐ CỦA HÀM MAIN

62

ĐỐI SỐ CỦA HÀM MAIN

63

ĐỐI SỐ CỦA HÀM MAIN

64

Trang 17

CBGD: ThS.Trần Anh Dũng 17

ĐỐI SỐ CỦA HÀM MAIN

65

ĐỐI SỐ CỦA HÀM MAIN

66

POINTER TRỎ ĐẾN HÀM

67

POINTER TRỎ ĐẾN HÀM

68

Trang 18

ỨNG DỤNG

• Danh sách liên kết là stack

ƒ Đưa một phần tử vào stack – thao tác push

ƒ Lấy một phần tử từ stack – thao tác pop

ƒ Xem stack

ƒ Khởi động stack

• Danh sách liên kết là queue

69

q

ƒ Thêm một thông tin vào queue – thao tác add

ƒ Lấy một thông tin khỏi queue – thao tác delete

ƒ Xem trị hiện hành của phần tử đầu của queue

ƒ Khởi động queue

BÀI TẬP

70

Ngày đăng: 12/08/2014, 02:22

w