我在看 《C语言程序设计 现代方法2》这本书中链表部分的时候有些疑惑.
有这样一个链表:
struct node {
int value;
struct node *next;
};
struct node *first;
struct node *new_node;
first = NULL;
new_node = malloc(sizeof(struct node));
new_node->value = 10;
new_node->next = first;
first = new_node;
new_node = malloc(sizeof(struct node));
new_node->value = 20;
new_node->next = first;
first = new_node;
......
书中有个搜索链表的函数:
struct node *search_list(struct node *list,int n)
{
for (;list != NULL; list = list->next)
if (list->value == n)
return list;
return NULL;
}
然后书中针对这个搜索函数说了这么句话:"因为list是原始链表指针的副本,所以在函数内改变它不会有任何损害".
我对这句话中的"副本"感到困惑,函数的参数是个指针类型,不应该是指向同一个地址的变量吗?怎么是个副本呢?
望大神答疑解惑!
このコピーは、(ポイントされたコンテンツのコピーではなく) ポインター変数自体のコピーを意味します。これは、関数の外部のリストのポイントに影響を与えることなく、関数内のどこでもリストをポイントできることを意味します。たとえば、次のように呼ばれている場所があります。
リーリーしたがって、リストが search_list 内のどこを指していても、外部のリスト ポインター変数は依然として xxx を指しています。
関数に渡されるパラメータは、型に関係なく常にコピーされます