鱼C论坛

 找回密码
 立即注册
查看: 1110|回复: 8

[已解决]单链表1的相关问题

[复制链接]
发表于 2021-2-9 20:16:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Lonerwcq 于 2021-2-10 15:48 编辑

是关于《带你学C带你飞》单链表1的问题

为什么在visual studio 2019里面画圈圈这里要加"&"才能正常运行
InkedSnipaste_2021-02-09_00-39-28_LI.jpg
我看小甲鱼课程里面不用"&"就能正常运行了啊
我自己理了下思路还是想不明白:
不加&的情况:
传入num,即它所指的那个向堆申请的结构体的地址,
然后getInput函数对地址进行操作,就是由结构体的地址查找其成员data,然后格式化输入
感觉逻辑上没问题


可在vs 2019里面不加"&"的话运行就会成这样:
R4ZMH8[)BZI5CJ7LT_K$A18.png
输入一个数字就直接中断了,我也不知道是为什么

全部的代码如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct Num
  4. {
  5.         int data;
  6.         struct Num *next;
  7. };

  8. void addnum(struct Num **);
  9. void getInput(struct Num *);
  10. void printnum(struct Num *);
  11. void release(struct Num *);

  12. int main(void)
  13. {
  14.         struct Num *head = NULL;
  15.         char ch;

  16.         while (1)
  17.         {
  18.                 printf("是否需要录入数字?(Y/N):");
  19.                 do
  20.                 {
  21.                         ch = getchar();
  22.                 } while (ch != 'Y' && ch != 'N');

  23.                 if (ch == 'Y')
  24.                 {
  25.                         addnum(&head);
  26.                 }
  27.                 else
  28.                 {
  29.                         break;
  30.                 }
  31.         }

  32.         printf("是否需要打印数字?(Y/N):");
  33.         do
  34.         {
  35.                 ch = getchar();
  36.         } while (ch != 'Y' && ch != 'N');

  37.         if (ch == 'Y')
  38.         {
  39.                 printnum(head);
  40.         }

  41.         release(head);

  42.         return 0;
  43. }

  44. void addnum(struct Num **head)
  45. {
  46.         struct Num *num;

  47.         num = (struct Num *)malloc(sizeof(struct Num));
  48.         if (num == NULL)
  49.         {
  50.                 printf("内存分配失败");
  51.                 exit(1);
  52.         }

  53.         getInput(&num);

  54.         num->next = *head;//解引用一次是head存放的值的地址,也就是结构体的地址,两次才是值
  55.         *head = num;
  56. }

  57. void getInput(struct Num *num)
  58. {
  59.         printf("请输入数字:");
  60.         scanf("%d", num->data);
  61. }

  62. void printnum(struct Num *head)
  63. {
  64.         struct Num *num;
  65.         int count = 1;

  66.         num = head;
  67.         while (num != NULL)
  68.         {
  69.                 printf("num%d = %d\n", count, num->data);
  70.                 num = num->next;
  71.                 count++;
  72.         }
  73. }

  74. void release(struct Num *head)
  75. {
  76.         struct Num *temp;
  77.         while (head != NULL)
  78.         {
  79.                 temp = head->next;
  80.                 free(head);
  81.                 head = temp;
  82.         }

  83.         printf("内存已释放\n");
  84. }
复制代码
最佳答案
2021-2-10 17:15:20
本帖最后由 李京 于 2021-2-10 17:17 编辑


你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,

小甲鱼没有加是因为用的是字符串,,不用加
你输入的是int,要加
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 20:23:34 | 显示全部楼层
请用图床上传图片
https://imgchr.com
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 22:28:57 | 显示全部楼层
你的图片没发出来,新鱼友没有上传图片的权限
这里有楼上老哥提到的链接的使用教程:

【技巧】新鱼油怎么传图片?
https://fishc.com.cn/thread-168190-1-1.html
(出处: 鱼C论坛)

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 12:04:33 | 显示全部楼层
画圈圈是哪里?

最好是把代码弄出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 15:43:32 | 显示全部楼层
qiuyouzhi 发表于 2021-2-9 20:23
请用图床上传图片
https://imgchr.com

改好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 15:44:05 | 显示全部楼层
李京 发表于 2021-2-10 12:04
画圈圈是哪里?

最好是把代码弄出来

编辑好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 15:44:48 | 显示全部楼层
昨非 发表于 2021-2-9 22:28
你的图片没发出来,新鱼友没有上传图片的权限
这里有楼上老哥提到的链接的使用教程:
【技巧】新鱼油怎么 ...

编辑好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 17:15:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 李京 于 2021-2-10 17:17 编辑


你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,

小甲鱼没有加是因为用的是字符串,,不用加
你输入的是int,要加

评分

参与人数 1荣誉 +5 鱼币 +4 贡献 +3 收起 理由
Lonerwcq + 5 + 4 + 3 感谢!!!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-10 20:31:35 | 显示全部楼层
李京 发表于 2021-2-10 17:15
你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,

哇原来如此,谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-7 14:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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