为什么我的指针代码给我错误的输出?。
我的实际代码是:
void fun1(int *x, int *y){
*x = 50;
*y = 100;
fun2(&x, &y);
printf("%d %d ", x, y);
}
void fun2(int *x, int *y){
*x = 6;
*y = 7;
}
void main()
{
int x = 5;
int y = 10;
fun1(&x, &y);
printf("%d %d",x,y);
}
我的预期输出是这样的:6 7 6 7
它给我这样的输出:6 7 50 100
谢谢。
答案 0 :(得分:3)
在fun1
中,表达式&x
是指向该指针的指针 。类型为int **
。
您不应该在此处使用address-of运算符,因为x
和y
已经是指针。
让编译器警告您的一种简单方法是在使用函数之前先声明函数fun2
:
// Declare fun2 prototype
void fun2(int *x, int *y);
void fun1(int *x, int *y)
{
...
}
// Define fun2 implementation
void fun2(int *x, int *y)
{
...
}
答案 1 :(得分:1)
void fun2(int*, int*)
之前,您必须声明或定义它fun1
中,printf("%d %d ", x, y);
行应为printf("%d %d ", *x, *y);
,因为x
和y
为int*
fun1
中,对于fun2(&x, &y);
,行fun2(x, y);
应该是x
,而y
是int*
以下code
可以工作:
#include <stdio.h>
void fun2(int *x, int *y){
*x = 6;
*y = 7;
}
void fun1(int *x, int *y){
*x = 50;
*y = 100;
fun2(x, y);
printf("%d %d\n", *x, *y);
}
int main()
{
int x = 5;
int y = 10;
fun1(&x, &y);
printf("%d %d\n",x,y);
return 0;
}
答案 2 :(得分:1)
Method 1. Point To Point To Int
void fun1(int *x, int *y){
*x = 50;
*y = 100;
fun2(&x, &y);
printf("%d %d ", *x, *y);
}
void fun2(int **x, int **y){
**x = 6;
**y = 7;
}
void main()
{
int x = 5;
int y = 10;
fun1(&x, &y);
printf("%d %d",x,y);
}