Lonerwcq 发表于 2021-2-9 20:16:38

单链表1的相关问题

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

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

为什么在visual studio 2019里面画圈圈这里要加"&"才能正常运行

我看小甲鱼课程里面不用"&"就能正常运行了啊
我自己理了下思路还是想不明白:
不加&的情况:
传入num,即它所指的那个向堆申请的结构体的地址,
然后getInput函数对地址进行操作,就是由结构体的地址查找其成员data,然后格式化输入
感觉逻辑上没问题


可在vs 2019里面不加"&"的话运行就会成这样:

输入一个数字就直接中断了,我也不知道是为什么

全部的代码如下:

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

struct Num
{
        int data;
        struct Num *next;
};

void addnum(struct Num **);
void getInput(struct Num *);
void printnum(struct Num *);
void release(struct Num *);

int main(void)
{
        struct Num *head = NULL;
        char ch;

        while (1)
        {
                printf("是否需要录入数字?(Y/N):");
                do
                {
                        ch = getchar();
                } while (ch != 'Y' && ch != 'N');

                if (ch == 'Y')
                {
                        addnum(&head);
                }
                else
                {
                        break;
                }
        }

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

        if (ch == 'Y')
        {
                printnum(head);
        }

        release(head);

        return 0;
}

void addnum(struct Num **head)
{
        struct Num *num;

        num = (struct Num *)malloc(sizeof(struct Num));
        if (num == NULL)
        {
                printf("内存分配失败");
                exit(1);
        }

        getInput(&num);

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

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

void printnum(struct Num *head)
{
        struct Num *num;
        int count = 1;

        num = head;
        while (num != NULL)
        {
                printf("num%d = %d\n", count, num->data);
                num = num->next;
                count++;
        }
}

void release(struct Num *head)
{
        struct Num *temp;
        while (head != NULL)
        {
                temp = head->next;
                free(head);
                head = temp;
        }

        printf("内存已释放\n");
}

qiuyouzhi 发表于 2021-2-9 20:23:34

请用图床上传图片
https://imgchr.com

昨非 发表于 2021-2-9 22:28:57

你的图片没发出来,新鱼友没有上传图片的权限
这里有楼上老哥提到的链接的使用教程:
【技巧】新鱼油怎么传图片?
https://fishc.com.cn/thread-168190-1-1.html
(出处: 鱼C论坛)

李京 发表于 2021-2-10 12:04:33

画圈圈是哪里?

最好是把代码弄出来

Lonerwcq 发表于 2021-2-10 15:43:32

qiuyouzhi 发表于 2021-2-9 20:23
请用图床上传图片
https://imgchr.com

改好了

Lonerwcq 发表于 2021-2-10 15:44:05

李京 发表于 2021-2-10 12:04
画圈圈是哪里?

最好是把代码弄出来

编辑好了

Lonerwcq 发表于 2021-2-10 15:44:48

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

编辑好了

李京 发表于 2021-2-10 17:15:20

本帖最后由 李京 于 2021-2-10 17:17 编辑

Lonerwcq 发表于 2021-2-10 15:44
编辑好了

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

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

Lonerwcq 发表于 2021-2-10 20:31:35

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


哇原来如此,谢谢大佬{:9_221:}
页: [1]
查看完整版本: 单链表1的相关问题