Mặc dù chủ đề được thảo luận nhiều lần, tôi vẫn chưa tìm thấy câu trả lời thỏa mãn nào. Khi nào cần trả lại dữ liệu từ một hàm bằng cách trả về hoặc để chuyển một tham chiếu để thay đổi dữ liệu trên địa chỉ? Câu trả lời cổ điển là chuyển một biến như tham chiếu đến một hàm khi nó trở nên lớn (để tránh việc sao chép ngăn xếp). Điều này có vẻ đúng đối với bất kỳ thứ gì như cấu trúc hoặc mảng. Tuy nhiên việc trả về một con trỏ từ một hàm không phải là không phổ biến. Trong thực tế, một số chức năng từ thư viện C đến chính xác. Ví dụ:C: Khi nào cần trả lại theo giá trị hoặc vượt qua tham chiếu
char *strcat(char *dst, const char *src);
Luôn trả về con trỏ đến đích ngay cả khi có lỗi. Trong trường hợp này, chúng ta chỉ có thể sử dụng biến được truyền và để lại cho nó là gì (như hầu hết).
Khi xem cấu trúc, tôi thấy điều tương tự xảy ra. Tôi thường trả về con trỏ khi các hàm chỉ cần được sử dụng trong khởi tạo biến.
char *p = func(int i, const char *s);
Sau đó, có đối số rằng các biến đối phó ngăn xếp là tốn kém và do đó, để sử dụng con trỏ thay thế. Nhưng như đã đề cập, here một số trình biên dịch có thể tự quyết định điều này (giả sử điều này cũng xảy ra với C). Có quy tắc chung hay ít nhất là một số quy ước bất thành văn khi sử dụng cái này hay cái kia? Tôi đánh giá cao hiệu suất trên thiết kế.
Âm thanh giống như http://programmers.stackexchange.com/ question – cup
Con trỏ trở lại thường dẫn đến vấn đề quản lý suốt đời đối tượng được trỏ đến, vì 90% thời gian, điểm mốc được xây dựng mới bởi hàm. – user3528438
Ví dụ với 'strcat' là đúng đối với API kiểu cũ. Mã lỗi trả về thay thế mới: 'errno_t strcat_s ( char * strDestination, size_t numberOfElements, const char * strSource )'. – i486