鱼C论坛

 找回密码
 立即注册
查看: 74|回复: 5

[已解决]为什么传过去的要是指针本身的地址呢?

[复制链接]
发表于 2022-6-22 15:31:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 1613551 于 2022-6-22 15:31 编辑

这个程序要实现的功能是,比如2和4之间插入一个3
为什么第61行是要取head头指针的地址呢?
后面赋值的时候,比如第14行然后又对head进行解引用赋值给current,那直接传入head不行吗?


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct Node
  4. {

  5.     int value;
  6.     struct Node *next;
  7. };
  8. void insertNode(struct Node **head, int value)
  9. {
  10.     struct Node *previous;
  11.     struct Node *current;
  12.     struct Node *new1;
  13.     current = *head;
  14.     previous = NULL;
  15.     while (current != NULL && current->value < value)
  16.     {
  17.         previous = current;
  18.         current = current->next;
  19.     }
  20.     new1 = (struct Node *)malloc(sizeof(struct Node));
  21.     if (new1 == NULL)
  22.     {
  23.         printf("内存分配失败");
  24.         exit(1);
  25.     }
  26.     new1->value = value;
  27.     new1->next = current;
  28.     if (previous == NULL)
  29.     {
  30.         *head = new1;
  31.     }
  32.     else
  33.     {
  34.         previous->next = new1;
  35.     }
  36. }
  37. void printNode(struct Node *head)
  38. {
  39.     struct Node *current;
  40.     current = head;
  41.     while (current != NULL)
  42.     {
  43.         printf("%d ", current->value);
  44.         current = current->next;
  45.     }
  46.     putchar('\n');
  47. }
  48. int main(void)
  49. {
  50.     struct Node *head = NULL;
  51.     int input;
  52.     while (1)
  53.     {
  54.         printf("请输入一个整数(输入-1表示结束):");
  55.         scanf("%d", &input);
  56.         if (input == -1)
  57.         {
  58.             break;
  59.         }
  60.         insertNode(&head, input);
  61.         printNode(head);
  62.     }
  63. }
复制代码
最佳答案
2022-6-22 16:05:35
1613551 发表于 2022-6-22 15:55
为什么要传指向节点的指针过去,而不能传节点指针,后面赋值的时候也是对指向节点的指针进行解引用把节 ...

实参不随形参改变而改变,所以只能把可能会改变的变量把它的指针传入函数,这样才能在子函数里改变主函数里的变量。
注意 指针也是变量
uTools_1655882857760.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2022-6-22 15:45:24 | 显示全部楼层
形参head是指向节点指针的指针,current和head是节点指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2022-6-22 15:55:32 | 显示全部楼层
风车呼呼呼 发表于 2022-6-22 15:45
形参head是指向节点指针的指针,current和head是节点指针


为什么要传指向节点的指针过去,而不能传节点指针,后面赋值的时候也是对指向节点的指针进行解引用把节点指针赋值过去的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2022-6-22 16:05:35 | 显示全部楼层    本楼为最佳答案   
1613551 发表于 2022-6-22 15:55
为什么要传指向节点的指针过去,而不能传节点指针,后面赋值的时候也是对指向节点的指针进行解引用把节 ...

实参不随形参改变而改变,所以只能把可能会改变的变量把它的指针传入函数,这样才能在子函数里改变主函数里的变量。
注意 指针也是变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2022-6-22 16:23:06 | 显示全部楼层
jhq999 发表于 2022-6-22 16:05
实参不随形参改变而改变,所以只能把可能会改变的变量把它的指针传入函数,这样才能在子函数里改变主函数 ...

懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2022-6-22 16:24:31 | 显示全部楼层
1613551 发表于 2022-6-22 15:55
为什么要传指向节点的指针过去,而不能传节点指针,后面赋值的时候也是对指向节点的指针进行解引用把节 ...

期望达到的效果是主函数中的变量head能改变。形参接收的是变量值的一份拷贝,传head在函数里面往后接入再多节点,也和主函数的head没关系。

评分

参与人数 1鱼币 +3 收起 理由
1613551 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2022-7-1 15:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表