马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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");
}
本帖最后由 李京 于 2021-2-10 17:17 编辑
你的scanf忘记加&这个了,//(74行)
因为没有&,你传进去就要加一个&才能正常
找半天,,,,
小甲鱼没有加是因为用的是字符串,,不用加
你输入的是int,要加
|