2008-12-06 38 views

Trả lời

19

Hãy thử

(*foo)->member = 1; 

Bạn cần phải rõ ràng sử dụng * đầu tiên. Nếu không, đó là một nỗ lực để thành viên dereference.

+0

Một ví dụ đáng ngờ: nếu hàm changeMember() được tạo trong thư viện lớp và tôi cần truy cập vào ứng dụng giao diện điều khiển của mình, cách thực hiện nó như thế nào ?? : @Jonathan Leffler – TechBrkTru

+0

@TechBrkTru: Vì đây là C, tôi không chắc chắn ý bạn là gì bởi một 'thư viện lớp'. Tuy nhiên, nếu bạn có nghĩa là 'thư viện', thì bạn chỉ cần đảm bảo rằng bạn có một tiêu đề với các khai báo hàm cần thiết được sử dụng trong mã cần gọi 'changeMember()' và bạn liên kết tệp thực thi với thư viện có chứa chức năng. Đó là tất cả các thói quen hoàn toàn. Nếu bạn có ý nghĩa gì đó khác, bạn có thể nên hỏi câu hỏi mới của riêng mình để bạn có thể giải thích đúng. –

+0

@JaredPar Tại sao chúng ta cần một con trỏ đến con trỏ cấu trúc để có thể thay đổi thành viên của cấu trúc (không phải là một con trỏ đủ để làm điều đó?) – Bionix1441

1

lẽ (* foo) -> thành viên = 1 (nếu nó được cấp phát động)

+0

Không có thể - nhưng phân bổ động là không quan trọng. –

7

Do ưu tiên điều hành, bạn cần phải đặt dấu ngoặc xung quanh này:

(*foo)->member = 1; 
3

Bạn có thể sử dụng một biến tạm thời để cải thiện khả năng đọc. Ví dụ:

Ttype *temp = *foo; 
temp->member = 1; 

Nếu bạn có quyền kiểm soát điều này và được phép sử dụng C++, cách tốt hơn là sử dụng tham chiếu. Ví dụ:

void changeMember(Ttype *&foo) { 
    foo->member = 1; 
} 
Các vấn đề liên quan