Trong rất nhiều ví dụ tôi đã đọc một getListLength đơn giản() chức năng sẽ giống như thế này:Pointers như các đối số trong hàm C
int getListLength(struct node *head)
{
struct node *temp = head;
int iCount = 0;
while (temp)
{
++iCount;
temp = temp->next;
}
return iCount;
}
gì đập vào mắt tôi như không cần thiết là việc kê khai của một con trỏ địa phương (trong trường hợp này * temp) sao chép tham số đã truyền. Nếu tôi nhớ lại chính xác, các tham số đã truyền có được các bản sao của riêng chúng. Do đó, sẽ không cần một con trỏ cục bộ sao chép đầu * chỉ vì đầu * là bản sao, đúng không? Nói cách khác, nó sẽ là chính xác để loại bỏ các con trỏ temp * và sử dụng đầu ở khắp mọi nơi thay thế?
"khi mã dài hơn và phức tạp hơn". - Tôi có thể tranh luận với điều đó. Nếu một hàm dài hơn OP được đăng, và nếu nó phức tạp đến nỗi nó thực hiện nhiều hơn một nhiệm vụ và cần phải nhớ các tên biến, thì hàm đó có thể được tái cấu trúc. –
Điều đó có lẽ đúng, nhưng thế giới thực hiếm khi hoàn hảo như người ta thích. – jjlin