1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình c c++chuong 7 compatibility mode

21 160 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 21
Dung lượng 379,51 KB

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

Nội dung

CHƯƠNG 7 CẤU TRÚCCấu trúc là tập hợp của một hoặcnhiều biến, có thể khác kiểu nhau,được nhóm lại dưới dạng một tên duynhất cho tiện xử lý.. Cấu trúc giúp cho việc tổ chức cácdữ liệu phức

Trang 1

CHƯƠNG 7 CẤU TRÚC

Cấu trúc là tập hợp của một hoặcnhiều biến, có thể khác kiểu nhau,được nhóm lại dưới dạng một tên duynhất cho tiện xử lý (Giống cấu trúcRecord trong Pascal)

Cấu trúc giúp cho việc tổ chức cácdữ liệu phức tạp, đặc biệt trong nhữngchương trình lớn vì trong nhiều tình huốngchúng cho phpé nhóm các biến có liênquan lại để xử lý như một đơn vị thay vìnhư các thực thể tách biệt

Trang 2

I Định nghĩa cấu trúc và khai báo biến

Tên_kiểu_cấu_trúc: là tên bất kỳ, dongười sử dụng đặt

Trang 3

2 Định nghĩa cấu trúc bằng typedef

Nếu một cấu trúc được định nghĩa vớitên_kiểu_cấu_trúc thì ta có thể cùngtypedef đê định nghĩa như sau:

Typedef struct < tên_kiểu_cấu_trúc>

<Tên_kiểu>;

Trang 4

Ví dụ:

typedef struct Date DATE;

Nếu một cấu trúc chưa định nghĩa, thì ta có thể dùng typedef để định nghĩa:

Typedef struct [Tên_kiểu_cấu_trúc] {

Trang 6

Khai báo riêng lẽ:

Dùng Tên_kiểu_bản_ghi hoặc thông quatên cấu trúc đã được định nghĩa bằngtypedef

+ Dùng tên_kiểu_cấu_trúc:

struct < tên_kiểu_cấu_trúc> <Danh sáchcác biến>

Trang 7

Ví dụ:

struct Date date,*pd;

+ Dùng tên định nghĩa bằng typedef

<Tên_kiểu> <danh sách các biến>

Ví dụ:

DATE date,*pd

II Khởi đầu giá trị cho cấu trúc:

Ta có thể khởi đầu giá trị cho mộtcấu trúc theo phương cách như là khởiđầu giá trị cho mảng Theo sautên_biến_cấu_trúc là dấu bằng (=),sau đó là danh dách các giá trị khởiđầu được đặt trong các dấu móc {}.Các giá trị khởi đầu có cùng kiểu với

Trang 8

Nếu nó là một biến cấu trúc:

Ta dùng toán tử dấu chấm (.) để thamchiếu đến các trường (thành phần)của cấu trúc

Cú pháp:

Trang 9

Nếu nó là một biến con trỏ trỏ đến cấu trúc:

Ta dùng toán tử mũi tên (->) để thamchiếu đến

Trang 10

Với các khai báo trên ta có các cách thamchiếu sau:

Trang 11

Gán hai biến cấu trúc cho nhau(cùng kiểucấu trúc)

Ví dụ:

scanf(“%2d - %2d %4d”, &today.day,

&today.month, &today.year);

Trang 12

IV Mảng các cấu trúc

Vì cấu trúc là khối đối tượng dữ liệu, do đó hoàn toàn có khả năng tạo ra một mảng các cấu trúc Khai báo mảng các cấu truc như sau:

struct <Tên_kiểu_cấu_trúc> <Tên_mảng> [<kích_thước>];

Hoặc là dùng tên đã được khai báo bởi typedef:

<Tên_kiểu> <Tên_mảng>[<kích_thước>];

Ví dụ:

Khai báo mảng cấu trúc:

struct Date aa[10];

DATE ab[10];

Lúc đó để tham chiếu đến các trường ta có

thể dùng như sau:

Trang 13

V Cấu trúc lồng nhau

Một cấu trúc được gọi là lồng nhaunếu có một trong các trường của cấutrúc này lại có kiểu cấu trúc Cấutrúc lồng nhau thường được dùng phổbiến trong lập trình C bởi vì nó chophép tạo ra các dữ liệu có thứ bậc

Vi dụ: Tạo cấu trúc để lưu thông tinngày sinh của một người

Trang 14

typedef struct

{

char name[30];struct

{

int day;

int month;int year;} birth_day;

} BDATE;

Trang 16

Tham chiếu đến các thành phần của cấu trúc lồng nhau thì hoàn toàn giống với việc tham chiếu trong cấu trúc không lồng nhau, tuy chỉ có những trường chứa cấu trúc thì phải thêm tên biến cấu trúc đó vào.

Ví dụ

Với cấu trúc vừa định nghĩa ở ví dụ trên, ta tham chiếu đến các thành phần của biến ngaysinh có kiểu BDATE là:

Tên: ngaysinh.name=“Tran Van A”;

Ngày sinh:

ngaysinh.birth_day.day=19;

ngaysinh.birth_day.month=04;

ngaysinh.birth_day.year=2003;

Trang 17

Về mặt lý thuyết thì không có bất kỳ một giới hạn nào về số mức lồng nhau của cấu trúc Nhưng lúc đó các tham chiếu đến các

trường sẽ càng trở nên phúc tạp và khó đọc hơn.

Cấu trúc tự tham chiếu:

Các cấu trúc gọi là tự tham chiếu nếu nó chứa một trường là con trỏ trỏ đến

chính nó.

Ví dụ:

struct a {

int a,b;

float c;

struct a *ptoa;

Trang 18

Tính tham chiếu trước (Forward

Referencing)

Tính chất này cho phép ta đưa ra các khaibáo các con trỏ trỏ đến các cấu trúcchưa được định nghĩa, đặc tính này cũngcho phép ta tạo ra sự tự tham chiếu nhưđã đề cập ở trên Ta có thể tạo ra cấutrúc sự tham chiếu lẫn nhau

Ví dụ:

struct s1{

int a;

struct s2 *b;

Trang 19

VI Truyền cấu trúc cho hàm

Có hai cách truyền cấu trúc cho hàm:

- Truyền theo biến cấu trúc (gọi là truyền theo giá trị)

- Truyền con trỏ trỏ đến cấu trúc (gọi là truyền theo tham chiếu)

Trang 21

Cấu trúc nhỏ (tức là kích thước cỡ xấp

xỉ với một con trỏ)

Muốn bảo đảm rằng lời gọi hàm sẽkhông làm thay đổi cấu trúc được truyềnvào (Khi một đối số truyền theo giá trị,trình biên dịch sẽ tạo một bản sao củađối số đó Hàm được gọi chỉ có thểthay đổi trên bản sao mà thôi)

Ngày đăng: 21/09/2017, 16:27

w