<< Chapter < Page Chapter >> Page >
Con trỏ và cấu trúc động

CON TRỎ VÀ CẤU TRÚC ĐỘNG

  • Khái niệm:

Khi khai báo một biến, dù là biến đơn hay biến thuộc kiểu dữ liệu có cấu trúc, ta đã quy định độ lớn vùng nhớ dành cho biến:

VD: a: real; biến a cần 6 byte

B: array[1..100] of integer; biến mảng b cần 200 byte

Việc khai báo như trên thường là phỏng đoán dung lượng cần thiết chứ không thật chính xác, gây nên lãng phí bộ nhớ.

Để tiết kiệm bộ nhớ, ngay khi chương trình đang làm việc, người lập trình có thể yêu cầu cấp phát bộ nhớ cho các biến, điều này gọi là cấp phát bộ nhớ động. Cấp phát bộ nhớ động được thực hiện thông qua biến con trỏ. Muốn có biến con trỏ ta phải định nghĩa kiểu con trỏ.

Kiểu dữ liệu con trỏ-biến con trỏ:

  • Con trỏ có định kiểu:

Kiểu con trỏ là một kiểu dữ liệu đặc biệt dùng để biểu diễn các địa chỉ. Kiểu con trỏ được định nghĩa theo cú pháp:

Tên kiểu con trỏ=^Kiểu dữ liệu;

Ví dụ 4.1:

Chu=String[20];

CT1=^Byte;

CT2=^Chu;

CT3=^Nguoi;

Nguoi=record

Hoten:String[20];

Namsinh:1900..2100;

End;

Chú ý: ta chỉ được phép đưa trực tiếp vào định nghĩa kiểu con trỏ các kiểu dữ liệu đơn giản sau: số nguyên, số thực, ký tự. Các kiểu dữ liệu có cấu trúc muốn đưa vào con trỏ thì phải thông qua một tên kiểu khai báo trong phần Type.

Cách định nghĩa 2 kiểu con trỏ Hoten và Ds sau là sai:

Type

Hoten=^String[20];

Ds=Array[1..10] of Byte;

Muốn sử dụng kiểu chuỗi và mảng cho kiểu con trỏ chúng ta phải định nghĩa như sau:

Type

S1=String[20];

Hoten=^S1;

a=array[1..10] of Byte;

Ds=^a;

  • Biến con trỏ:

Biến con trỏ có thể khai báo thông qua kiểu con trỏ hoặc khai báo trực tiếp.

Ví dụ 4.2:

Var

So:^integer;

Sinhvien:CT3;

Hoten:CT2;

Thutu, Mahoso:^Word;

Biến con trỏ không dùng để lưu trữ các giá trị của biến mà lưu trữ địa chỉ của biến. Dù kích thước vùng dữ liệu mà các biến con trỏ trỏ tới khác nhau nhưng kích thước của biến con trỏ vẫn là 4 byte.

  • Con trỏ không định kiểu:

Là kiểu con trỏ không quan tâm đến kiểu dữ liệu mà nó trỏ tới.

Cách khai báo:

Var tên biến: Pointer;

  • Địa chỉ của một đối tượng:

Địa chỉ một đối tượng trong bộ nhớ được xác định bởi địa chỉ của ô nhớ đầu tiên mà hệ thống dành cho đối tượng đó.

$0101 $FFFF
Segment (địa chỉ đoạn) Offset(địa chỉ tương đối trong đọan)

Địa chỉ ô thứ 65535, thuộc đoạn 257.

Các thủ tục và hàm tác động lên con trỏ:

  • Gán giá trị ban đầu:

Ct:=nil;

  • Gán địa chỉ của một đối tượng cho con trỏ:
  • ct:=@x;

b. ct:=Addr(x)

Hàm Addr()cho địa chỉ của đối tượng x, địa chỉ này thuộc kiểu Pointer

c. ct:=Ptr(segment):

Hàm Ptr trong phép gán trên đòi hỏi các tham số segment và offset phải là giá trị kiểu Word viết trong hệ 16, ví dụ :

ct:= Ptr($B800,$0000);đưa con trỏ trỏ tới ô nhớ của vùng Video Ram

Nhận xét:

Hai phép gán @ và Addr() cùng trả về địa chỉ kiểu pointer nên chúng là tương đương.

3. 3 phép gán giữa hai con trỏ

Hai con trỏ tương thích (cùng kiểu) có thể gán giá trị cho nhau, khi đó chúng cùng trỏ tới một địa chỉ .

Ví dụ 4.3

Var

ct1:^Float;

ct2:^Byte;

ct3:^Pointer;

x:string;

Ví dụ trên khai báo ba con trỏ thuộc ba kiểu khác nhau, ct1 là con trỏ thực,ct2 là con trỏ nguyên và ct3là con trỏ không định kiểu, x là biến chuỗi. Khi đó các phép gán :

Questions & Answers

what is defense mechanism
Chinaza Reply
what is defense mechanisms
Chinaza
I'm interested in biological psychology and cognitive psychology
Tanya Reply
what does preconceived mean
sammie Reply
physiological Psychology
Nwosu Reply
How can I develope my cognitive domain
Amanyire Reply
why is communication effective
Dakolo Reply
Communication is effective because it allows individuals to share ideas, thoughts, and information with others.
effective communication can lead to improved outcomes in various settings, including personal relationships, business environments, and educational settings. By communicating effectively, individuals can negotiate effectively, solve problems collaboratively, and work towards common goals.
it starts up serve and return practice/assessments.it helps find voice talking therapy also assessments through relaxed conversation.
miss
Every time someone flushes a toilet in the apartment building, the person begins to jumb back automatically after hearing the flush, before the water temperature changes. Identify the types of learning, if it is classical conditioning identify the NS, UCS, CS and CR. If it is operant conditioning, identify the type of consequence positive reinforcement, negative reinforcement or punishment
Wekolamo Reply
please i need answer
Wekolamo
because it helps many people around the world to understand how to interact with other people and understand them well, for example at work (job).
Manix Reply
Agreed 👍 There are many parts of our brains and behaviors, we really need to get to know. Blessings for everyone and happy Sunday!
ARC
A child is a member of community not society elucidate ?
JESSY Reply
Isn't practices worldwide, be it psychology, be it science. isn't much just a false belief of control over something the mind cannot truly comprehend?
Simon Reply
compare and contrast skinner's perspective on personality development on freud
namakula Reply
Skinner skipped the whole unconscious phenomenon and rather emphasized on classical conditioning
war
explain how nature and nurture affect the development and later the productivity of an individual.
Amesalu Reply
nature is an hereditary factor while nurture is an environmental factor which constitute an individual personality. so if an individual's parent has a deviant behavior and was also brought up in an deviant environment, observation of the behavior and the inborn trait we make the individual deviant.
Samuel
I am taking this course because I am hoping that I could somehow learn more about my chosen field of interest and due to the fact that being a PsyD really ignites my passion as an individual the more I hope to learn about developing and literally explore the complexity of my critical thinking skills
Zyryn Reply
good👍
Jonathan
and having a good philosophy of the world is like a sandwich and a peanut butter 👍
Jonathan
generally amnesi how long yrs memory loss
Kelu Reply
interpersonal relationships
Abdulfatai Reply
Got questions? Join the online conversation and get instant answers!
Jobilize.com Reply

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình nâng cao. OpenStax CNX. Sep 19, 2008 Download for free at http://cnx.org/content/col10576/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình nâng cao' conversation and receive update notifications?

Ask