Chúng ta có thể định nghĩa các hàm trong các cấu trúc trong ngôn ngữ lập trình C không?Xác định các hàm trong các cấu trúc
Trả lời
Không, vì chức năng không phải là dữ liệu. Nhưng bạn có thể định nghĩa các con trỏ hàm bên trong một cấu trúc.
struct foo {
int a;
void (*workwithit)(struct foo *);
}
No.
Bạn có thể có con trỏ chức năng trong cấu trúc, nhưng đó là gần như bạn sẽ nhận được.
Không, bạn không thể. Structs chỉ có thể chứa các biến bên trong, lưu trữ các con trỏ hàm bên trong cấu trúc có thể cung cấp cho bạn kết quả mong muốn.
Không, Bạn không thể xác định các chức năng bên trong các cấu trúc trong các chương trình C, Tuy nhiên nếu phần mở rộng của tập tin của bạn là .cpp (đó không phải là C), bạn có thể có chức năng thành viên như các lớp học tuy nhiên modifier mặc định của những các hàm sẽ là 'công khai' (không giống như lớp).
đọc những liên kết này để biết thêm thông tin về cấu trúc a good link, another good link, One more good link
Như một quy ước trong C++, Lớp được sử dụng cho lưu trữ chức năng và biến cả và cấu trúc được sử dụng chỉ để lưu trữ thông tin (ví dụ: dữ liệu).
Những gì bạn có thể có nghĩa là: "Tuy nhiên, nếu bạn biên dịch điều này bằng một ngôn ngữ lập trình khác được gọi là C++ ..." – Lundin
Bạn đúng @Lundin, Thực ra ở cấp độ bắt đầu, ít sinh viên nhầm lẫn bằng cách viết mã C bên trong tệp .cpp, đó thực sự là một thực hành không tốt. – aProgrammer
Bạn thực sự không thể khai báo nội dung bên trong cấu trúc trong C. Đây không phải là C++ hoặc bất kỳ ngôn ngữ OO nào khác nơi đối tượng đóng gói một số loại phạm vi.
Cấu trúc C là các đối tượng rất đơn giản, nó chỉ là cú pháp để quản lý một phần bộ nhớ. Khi bạn tạo cấu trúc mới "instance", struct A a;
, trình biên dịch chỉ dự trữ không gian ngăn xếp theo kích thước của nó, và khi bạn làm a.member
, trình biên dịch biết bù đắp của thành viên, vì vậy nó nhảy tới &a
+ bù đắp của thành viên đó. Những offset này thường không chỉ là tổng các kích cỡ của các thành viên trước, bởi vì trình biên dịch thường thêm một số bit đệm vào cấu trúc để sắp xếp nó thành bộ nhớ đẹp hơn.
Hy vọng nó đã giúp ích một chút. Bạn rõ ràng mong đợi hơi quá nhiều từ C stuctures :-)
Không, bạn không thể có hàm bên trong struct trong chương trình C. Tôi đã viết một mã duy nhất và lưu lại dưới dạng .c và a .cpp. Tệp .cpp tuân thủ và hoạt động như mong đợi, nhưng tệp .c thậm chí không biên dịch.
Đây là mã để bạn tham khảo. Lưu nó một lần như .cpp và sau đó chạy nó. Sau đó lưu cùng mã với .c và biên dịch nó. Bạn sẽ nhận được một lỗi biên dịch.
#include <stdio.h>
struct C {
void Test(int value) {
static int var = 0;
if (var == value)
printf("var == value\n");
else
printf("var != value\n");
var = value;
}
};
int main() {
C c1;
C c2;
c1.Test(100);
c2.Test(100);
int ii;
scanf("%d",&ii);
}
Vì khi không thể có ** hàm ** bên trong ** C ** chương trình? – baldrs
Tôi có nghĩa là.Cấu trúc trong chương trình ac.Đã sửa chữa –
Cố định nó.Thanks –
Không, nhưng bạn có thể trong cấu trúc C++!
Vì vậy, tôi trả lời câu hỏi của mình với "Không", Bạn đã bỏ lỡ phần đó? – NDEthos
Có, bạn có thể khai báo hàm bên trong cấu trúc, vui lòng tham khảo đoạn mã sau.
#include<stdio.h>
struct A
{
int a;
void (*ptr)(const struct A*);
};
void display(const struct A*p)
{
//p->a = 10; //It is not possible because structure is constant
printf("Display fun :%d\n",p->a);
}
void print(struct A*ptr)
{
ptr->a = 20;
printf("Print fun :%d\n",ptr->a);
}
int main()
{
struct A obj = {5}; //Structure initialization
display(&obj);
print(&obj);
return 0;
}
- 1. Truyền các cấu trúc đến các hàm
- 2. xác định cấu trúc tĩnh const
- 3. Việc thêm các hàm "tĩnh" vào cấu trúc mã hóa
- 4. Có bất kỳ "hình phạt" nào để xác định cấu trúc bên trong một hàm không?
- 5. có thể xác định hàm bên trong cấu trúc C không?
- 6. Tại sao tôi có thể định nghĩa các cấu trúc và các lớp trong một hàm trong C++?
- 7. Loại trừ các nút con nhất định khi cấu trúc dữ liệu không xác định
- 8. Xác định cấu trúc 32/64 bit trong assembly
- 9. Sử dụng các macro trong C để xác định cấu trúc dữ liệu
- 10. Các cấu trúc do người dùng định nghĩa với hàm mex MATLAB
- 11. Xác định cấu trúc trong C với Malloc
- 12. các ký hiệu trong cấu trúc lại
- 13. Hàm sizeof() hoạt động như thế nào đối với các cấu trúc trong C?
- 14. Những hạn chế nào trong ISO C++ 03 trên các cấu trúc được xác định tại phạm vi chức năng?
- 15. Các chức năng trong cấu trúc
- 16. Các cấu trúc có trong phần .pdata
- 17. python ctypes mảng của các cấu trúc
- 18. chức năng init cho các cấu trúc
- 19. Tại sao toán tử = hoạt động trên các cấu trúc mà không được xác định?
- 20. sizeof() cấu trúc không xác định. Tại sao?
- 21. đối số mặc định cho cấu trúc
- 22. Lấy các định nghĩa cấu trúc bằng cách sử dụng các trang của người đàn ông
- 23. PHP - xác định các lớp bên trong một hàm
- 24. xác định một danh sách các hàm trong Python
- 25. C# quản lý các chuỗi trong cấu trúc
- 26. Cấu trúc của các ứng dụng bình
- 27. Có thể định nghĩa một mảng các cấu trúc hoặc các đối tượng trong VBA không?
- 28. Cấu trúc trả về từ hàm (C)
- 29. Cách sắp xếp một mảng các cấu trúc trong ColdFusion
- 30. Cấu trúc tĩnh trong C++
Vâng, đây là một phần của internet, vì vậy ... – Jon
Bạn có ý nghĩa gì đó như struct A {void f (void) {...}}; ? – tchap