这是一个简单的程序,输入两个数字,打印出来,然后使用
功能改变改变x和y并在main中打印出来但由于某种原因它
不会打印出“输入两个数字”,我无论如何都可以输入两个数字
输入第二个号码后崩溃,谁能告诉我我做错了什么?#include <stdio.h>
#include <stdlib.h>
main()
{
int x, y;
puts("Enter two numbers ");
scanf("%d",&x);
scanf("%d",&y);
void alter(int*,int*);
printf("Before alter x = %d y = %d\n",x,y);
alter(x,y);
printf("After alter x = %d y = %d\n",x,y);
}
void alter(int* x, int* y)
{
*x = *x+*y;
*y = *x**y;
}
答案 0 :(得分:2)
函数alter()
有两个整数pointers
作为parameter
。因此,当你调用函数时,你必须提供两个地址作为参数,否则会出现runtime error
和放大器;这就是你的程序崩溃的原因。你应该写:
alter(&x,&y);
而不是
alter(x,y)
因为您的函数的参数是:
int* x, int* y
答案 1 :(得分:0)
更改
puts("Enter two numbers ");
到
puts("Enter two numbers \n");
\n
刷新输出流,以便在控制台上打印字符串。
更改
alter(x,y);
到
alter(&x,&y);
因为您的功能需要int *
而不是int
。
答案 2 :(得分:0)
编译代码时。编译器为您的问题提供警告
user1.c: In function ‘main’:
user1.c:13:3: warning: passing argument 1 of ‘alter’ makes pointer from integer without a cast
user1.c:10:8: note: expected ‘int *’ but argument is of type ‘int’
user1.c:13:3: warning: passing argument 2 of ‘alter’ makes pointer from integer without a cast
user1.c:10:8: note: expected ‘int *’ but argument is of type ‘int’
始终查看编译器警告。它可以帮助你克服这个问题。
这里alter()将指针作为参数,你给出了pass by value变量,所以给出了崩溃
将其更正为
alter(&x,&y);
答案 3 :(得分:0)
alter(x,y);
应该是
alter(&x,&y);
答案 4 :(得分:0)
由于您使用的是传递变量地址而不是其值的指针,因此您必须将x
和y
的地址发送到void alter(int* x, int* y)
而不是x
的值}和y
本身。因此,将函数调用从alter(x,y);
(将值传递给被调用函数)更改为alter(&x,&y);
(仅将变量x
和y
的地址传递给指针)< / p>