PDA

View Full Version : Lý thuyết " Giáo trình ngôn ngữ C Aptech"(Bài 14 : Hàm - Lý thuyết)(tiep theo)


x9nd
05-23-2009, 04:55 PM
Bài 14 : Hàm - Lý thuyết(tiep theo)
9. Các biến

- Như đã thảo luận, các biến là những vị trí được đặt tên trong bộ nhớ, được sử dụng để chứa giá trị có thể hoặc không thể được sửa đổi bởi một chương trình hoặc một hàm. Có ba loại biến cơ bản: biến cục bộ, tham số hình thức, và biến toàn cục.
+ Biến cục bộ là những biến được khải báo bên trong một hàm.
+ Tham số hình thức được khai báp trong một định nghĩa hàm như là các tham số.
+ BIến toàn cục được khai báo bên ngoài các hàm.

a. Biến cục bộ

- Biến cục bộ còn được gọi là biến động, từ khóa auto được sử dụng để khai báo chúng. Chúng chỉ được tham chiếu đến bởi các lệnh bên trong của khối lệnh mà biến được khai báo. Để rõ hơn, một biến cục bộ được tạo ra trong lúc vào một khối và bị hủy trong lúc đi ra khỏi khối đó. Khối lệnh thông thường nhất mà trong đó một biến cục bộ được khai báo chính là hàm. Vì các biến cục bộ được tạo ra và hủy đi trong một khối mà chúng được khai báo, nên nội dung của chúng bị mất bên ngoài phạm vi của khổi. Điều này có nghĩa là chúng không thể duy trì giá trị của chúng giữa các lần gọi hàm. Từ khóa auto có thể được dùng để khai báo các biến cục bộ, nhưng thường nó không được dùng vì mặc nhiên các biến không toàn cục được xem như là biến cục bộ. Điều quan trọng cần nhớ là tất cả các biến cục bộ phải được khai báo tại điểm bắt đầu của khối mà trong đó chúng được định nghĩa, và trước tất cả các câu lện thực thi.

b. tham số hình thức

- Một hàm sử dụng các đối số phải khai báo các biến để nhận các giá trị của các đối số. Các biến này được gọi là tham số hình thức của hàm và hoạt động giống như bất kỳ một biến cục bộ bên trong hàm. Các biến này được khai báo bên trong cặp dấu ngoặc () theo sau tên hàm. Các tham số hình thức phải được khai báo cùng với kiểu của chúng. Các biến này có thể được sử dụng bên trong hàm như các biến cục bộ bình thường. Chúng bị hủy đi khi ra khỏi hàm. Cần chú ý là các tham số hình thức đã khai báo có cùng kiểu dữ liệu với các đối số được sử dụng khi gọi hàm. Trong trường hợp có sai, C có thể không hiển thị lỗi nhưng có thể đưa ra một kết quả không mong muốn. Điều này là vì, C vẫn đưa ra một vài kết quả trong các tình huống khác thường. Người lập trình phải đảm bảo rằng không có các lỗi về sai kiểu. Cúng giống như với các biến cục bộ, các phép gán cũng có thể được thực hiện với tham số hình thức của hàm và chúng cùng có thể được sử dụng bất kỳ biểu thức nào mà C cho phép.

c. BIến toàn cục

- Các biến toàn cục là biến được thấy bởi toàn bộ chương trình, và có thể được sử dụng bởi một mã lệnh bất kỳ. Chúng được khai báo bên ngoài các hàm của chương trình và lưu giá trị của chúng trong suốt sự thực thi của chương trình. Các biến này có thể được khai báo bên ngoài main() hoặc khai báo bất kỳ nơi đâu trước lần sử dụng đầu tiên. Tuy nhiên, tốt nhất để khai báo các biển toàn cục là tại đầu chương trình, nghĩa là trước hàm main(). Các biến toàn cục được lưu trữ trong các vùng cố định của bộ nhớ. Các biến toàn cục hữu dụng khi nhiều hàm trong chương trình sử dụng cùng dữ liệu. Tuy nhiên, nên tránh sử dụng biến toàn cục nếu không cần thiết, vì chúng giữ bộ nhớ trong suốt thời gian thực hiện chương trình. Vì vậy việc sử dụng một biến toàn cục ở nơi mà một biến cục bộ có khả năng đáp ứng cho hàm sử dụng là không hiệu quả.

d. Lớp lưu trữ (Stroage Class)

- Mỗi biến trong C có một đặc trưng được gọi là lớp lưu trữ. Lớp lưu trữ xác định hai khía cạnh của biến: thời gian sống và pham vi của biến. Thời gian sống của một biến là thời gian mà giá trị của biến tồn tại. Sự thấy được của một biến xác định các phần của một chương trình sẽ có thể nhận ra biến. Một biến co thể xuất hiện trong một khối, một hàm, một tập tin, một nhóm các tập tin, hoặc toàn bộ chương trình. Theo cách nhìn của chương trình C, một tên biến xác định một vài vị trí vật lý bên trong máy tính, ở đó một chuỗi các bit biểu diễn giá trị được lưu trữ của biến. Có hai loại vị trí trong máy tính mà ở đó giá trị của biến có thể được lưu trữ : bộ nhớ hoặc thanh ghi CPU. Lớp lưu trữ của biến xác định vị trí biến được lưu trữ là trong bộ nhớ hay trong một thanh ghi. C có bốn lớp lưu trữ. Đó là:
+ Auto : biến tự động
+ External : biến ngoại
+ Static : biến tĩnh
+ Register : biến thanh ghi

e. Các quy luật về phạm vi của hàm

- Qui luật về phạm vi là những qui luật quyết định một đoạn mã lệnh có thể truy xuất đến một đoạn mã lệnh khác hoặc dữ liệu hay không. Trong C, mỗi hàm của chương trình là các khối lệnh riêng lẻ. Mã lệnh bên trong một hàm là cục bộ với hàm đó và không thể được truy xuất bởi bất kỳ lệnh nào ở ngoài hàm, ngoại trừ lời gọi hàm. Mã lệnh bên trong một hàm là ẩn đối với phần còn lại của chương trình, và trừ khi nó sử dụng biến hoặc dữ liệu toàn cục, nó có thể tác động hoặc bị tác động bởi các phần của chương trình. Để rõ hơn, mã lệnh và dữ liệu được nghĩa bên trong một hàm không thể tương tác với mã lệnh hay dữ liệu được định nghĩa trong hãm khác bởi vì hai hàm có phạm vi khác nhau. Trong C, tất cả các hàm có cùng mức phạm vi. Nghĩa là, một hàm không thể được định nghĩa bên trong một hàm khác. Chính vì lý do này mà C không phải là một ngôn ngữ cấu trúc khối về mặt kỹ thuật.

f. Gọi hàm

- Một cách tổng quát, các hàm giao tiếp với nhau bằng cách truyền tham số. Các tham số được truyền theo một trong hai cách sau:
+ Truyền bằng giá trị : Mặc nhiên trong C, tất cả các đối số của hàm được truyền bằng giá trị. Điều này nghĩa là, khi các đối số được truyền đến hàm được gọi, các giá trị được truyền thông qua các biến tạm. Mọi sự thao tác chỉ được thực hiện trên các biến tạm này. Hàm được gọi không thể thay đổi giá trị của chúng. Vì vậy, các đối số được gọi là truyền bằng giá trị khi giá trị của các biến được truyền đến hàm được gọi và bất kỳ sự thay đổi trên giá trị này cũng không ảnh hưởng đến giá trị gốc của biến đã truyền.
+ Truyền bằng tham chiếu. : Khi các đối số được truyền bằng giá trị, các giá trị của đối số của hàm đang gọi không bị thay đổi. Tuy nhiên, có thể có trường hợp, ở đó giá trị của các đối số phải được thay đổi. Trong những trường hợp như vậy, truyền bằng tham chiếu được dùng. Truyền bằng tham chiếu, hàm được phép truy xuất đến vùng bộ nhớ thực hiện của các đối số và vì vậy có thể thay đổi giá trị của các đối số của hàm gọi.

10. Sự ***g nhau của lời gọi hàm

- Lời gọi hàm từ một khác được gọi là sự ***g nhau của lời gọi hàm.

11. Hàm trong chương trình nhiều tệp tin

- Các chương trình có thể được tạo bởi nhiều tập tin. Những chương trình như vậy được tao bởi các hàm lớn, ở đó mỗi hàm có thể chiếm một tập tin. Cũng như các biến trong các chương trình nhiều tập tin, các hàm cũng có thể được định nghĩa là static hoặc external. Phạm vi của hàm external có thể được sử dụng trong tất cả các tập tin của chương trình, và đó là cách lưu trữ mặc định cho các tập tin. Các hàm static chỉ được nhận biết bên trong tập tin chương trình và phạm vi của nó không vượt khỏi tập tin chương trình.

12. Con trỏ đến hàm

- Một đặc tính mạnh mẽ của C vẫn chưa được đề cập, chính là con trở hàm. Dù rằng một hàm không phải là một biến, nhưng nó có địa chỉ vật lý trong bộ nhớ nơi có thể gán cho một con trỏ. Một địa chỉ hàm là điểm đi vào của hàm và con trỏ hàm có thể sử dụng để gọi hàm.

tinhyeuthuytinh
12-15-2009, 03:34 PM
choa tat ca cac ban mjnh la thanh vien moi gia nhap mong duoc su giup do cua cac ban mjnh se co gang tro thanh mot thanh cien xuat sac:monkey85::monkey85::monkey41:

admin
12-15-2009, 04:01 PM
choa tat ca cac ban mjnh la thanh vien moi gia nhap mong duoc su giup do cua cac ban mjnh se co gang tro thanh mot thanh cien xuat sac:monkey85::monkey85::monkey41:
Trời ơi! Thành viên mới sao lại "chào mừng" ở đây chứ! lẽ ra bạn phải vô box giới thiệu, làm quen chứ!
Bạn lưu ý bài viết phải bằng Tiếng Việt có dấu hoặc Tiếng Anh nhé!