为什么我的指针代码在C语言中给我错误的输出?

时间:2018-11-07 04:39:44

标签: c pointers

为什么我的指针代码给我错误的输出?。

我的实际代码是:

 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

谢谢。

3 个答案:

答案 0 :(得分:3)

fun1中,表达式&x是指向该指针的指针 。类型为int **

您不应该在此处使用address-of运算符,因为xy已经是指针。

让编译器警告您的一种简单方法是在使用函数之前先声明函数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)

  1. 在使用void fun2(int*, int*)之前,您必须声明或定义它
  2. fun1中,printf("%d %d ", x, y);行应为printf("%d %d ", *x, *y);,因为xyint*
  3. 在功能fun1中,对于fun2(&x, &y);,行fun2(x, y);应该是x,而yint*

以下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);
}