Bạn cần dành 70% thời gian học cho việc thực hành để cải thiện độ ì. Phần hàm mình đã chia nhỏ thành các bài để dễ follow rồi. Nội dung các phần trước bạn chưa vững thì khó là hiển nhiên.
Hàm nguyên mẫu mục đích chính là để cho trình biên dịch nhìn thấy hàm đó và tiến hành các thao tác khớp lệnh gọi hàm. Không phải nhằm cá nhân hóa.
Ví dụ một hàm f1 gọi hàm f2. Nếu hàm f2 xuất hiện phía trên f1 thì chương trình có thể chạy mà không cần khai báo nguyên mẫu. Ngược lại nếu như định nghĩa của f2 xuất hiện sau f1, chương trình sẽ bị lỗi.
Khi đó sử dụng khai báo nguyên mẫu cho phép e thực hiện đặt định nghĩa hàm ở mọi nơi hợp lệ mà không lo lỗi không tìm thấy hàm để thực hiện lời gọi.
Em hãy thử địng nghĩa các hàm sau hàm main và gọi các hàm đó trong main sẽ thấy rõ vấn đề.
a cho e hỏi e không khai báo hàm nguyên mẫu trong file.h mà định nghĩa trong file.c include file.h mà vẫn chạy đc . Vậy khai báo trong file.h có tác dụng gì ạ.
Thầy Thân cho mình hỏi, trong bài giải của Thầy, câu 2: nhập 2 số trả về void:
void getRealNumbers(float* a, float* b) {
puts(“Nhap hai so thuc: “);
scanf(“%f%f”, a, b);
}
Tại sao ở đây mình dùng float* ạ? dấu * có ý nghĩa gì ko ạ?
Và “scanf” không thấy toán tử địa chỉ “&” ạ?
Mình xin cảm ơn nhiều.
đó là gọi hàm truyền tham chiếu. bạn xem lại bài đó sẽ rõ nhé. với con trỏ(chi tiết trong chương con trỏ) thì không cần & trước tên khi dùng với scanf.
anh cho em hỏi là baitap2 sử dụng cách gọi hàm truyền giá trị vẫn được đúng không ạ, không nhất thiết phải sử dụng truyền tham chiếu kiểu float*a..đúng ko ạ ?
20 Comments
Em chọn Set as Startup Project .Nhưng lại không có hiện tượng gì xảy ra, thì không biết là như nào ạ?
E làm theo đúng hướng dẫn chưa?
phần này khó mà ad giảng nhanh quá, khó hiểu thật sự.
Bạn cần dành 70% thời gian học cho việc thực hành để cải thiện độ ì. Phần hàm mình đã chia nhỏ thành các bài để dễ follow rồi. Nội dung các phần trước bạn chưa vững thì khó là hiển nhiên.
Có phải hàm nguyên mẫu là để dành cho mục đính cá nhân hoá đúng không thầy có thể cho em hiểu hơn về hàm nguyên mẫu được không ạ.
Hàm nguyên mẫu mục đích chính là để cho trình biên dịch nhìn thấy hàm đó và tiến hành các thao tác khớp lệnh gọi hàm. Không phải nhằm cá nhân hóa.
Ví dụ một hàm f1 gọi hàm f2. Nếu hàm f2 xuất hiện phía trên f1 thì chương trình có thể chạy mà không cần khai báo nguyên mẫu. Ngược lại nếu như định nghĩa của f2 xuất hiện sau f1, chương trình sẽ bị lỗi.
Khi đó sử dụng khai báo nguyên mẫu cho phép e thực hiện đặt định nghĩa hàm ở mọi nơi hợp lệ mà không lo lỗi không tìm thấy hàm để thực hiện lời gọi.
Em hãy thử địng nghĩa các hàm sau hàm main và gọi các hàm đó trong main sẽ thấy rõ vấn đề.
Dạ em hiểu rồi cảm ơn thầy.
a cho e hoi dung Dev C co dc ko a
a cho e hỏi e không khai báo hàm nguyên mẫu trong file.h mà định nghĩa trong file.c include file.h mà vẫn chạy đc . Vậy khai báo trong file.h có tác dụng gì ạ.
Thầy Thân cho mình hỏi, trong bài giải của Thầy, câu 2: nhập 2 số trả về void:
void getRealNumbers(float* a, float* b) {
puts(“Nhap hai so thuc: “);
scanf(“%f%f”, a, b);
}
Tại sao ở đây mình dùng float* ạ? dấu * có ý nghĩa gì ko ạ?
Và “scanf” không thấy toán tử địa chỉ “&” ạ?
Mình xin cảm ơn nhiều.
đó là gọi hàm truyền tham chiếu. bạn xem lại bài đó sẽ rõ nhé. với con trỏ(chi tiết trong chương con trỏ) thì không cần & trước tên khi dùng với scanf.
^^! Bài đó chưa học mà thầy Thân, bài đó sau bài này ^^!
vậy thì bạn học bài đó rồi làm là oke.
Anh ơi bài 4 lời giải của anh cái phần liệt kê số nguyên tố đầu tiên nhập n = 5 nhưng nó chỉ hiệ ra 3 số nguyên tố đầu tiên thôi anh
ok bài giải đã được update!
a cho e hỏi: e không khai báo hàm nguyên mẫu trong file.h mà định nghĩa trong file.c mà vẫn chạy đc . Vậy khai báo trong file.h có tác dụng gì ạ.
Thế làm sao để các project/modul hay các ứng dụng có thể chia sẻ chung các chức năng với nhau? khi đó e chỉ cần import file .h vào là xong.
anh cho em hỏi là baitap2 sử dụng cách gọi hàm truyền giá trị vẫn được đúng không ạ, không nhất thiết phải sử dụng truyền tham chiếu kiểu float*a..đúng ko ạ ?
đúng r. có nhiều cách giải quyết một bài tập. e làm theo cách nào mà nó ra được kết quả mong muốn theo yêu cầu là ok.
Vâng ạ, em cảm ơn