c++ - 关于结构体指针作为参数传递的疑惑

查看:125
本文介绍了c++ - 关于结构体指针作为参数传递的疑惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在看 《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是原始链表指针的副本,所以在函数内改变它不会有任何损害".
我对这句话中的"副本"感到困惑,函数的参数是个指针类型,不应该是指向同一个地址的变量吗?怎么是个副本呢?
望大神答疑解惑!

解决方案

这个副本的意思是指这个指针变量本身的副本(而不是所指内容的副本),也就是说你在函数里面可以随便让 list 指向任何地方,都不会影响函数外面 list 的指向。比如有个地方这样调用:

struct node *list = xxx;
int n = 10;
search_list(list, n); // 假设这里面把 list 指向 yyy
printf("%d\n", *list == xxx); // 这里 list 还是指向 xxx,所以为 true (输出为 1)

那么不管 search_list 里面把 list 往哪里指,外面那个 list 指针变量还是指向 xxx。

这篇关于c++ - 关于结构体指针作为参数传递的疑惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆