Почему мой код указателя дает мне неправильный вывод в C? - PullRequest
0 голосов
/ 07 ноября 2018

Почему мой код указателя дает мне неправильный вывод?

Где мой фактический код :

 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 голосов
/ 07 ноября 2018
  1. Перед использованием void fun2(int*, int*), вы должны объявить или определить его
  2. В функции fun1 строка printf("%d %d ", x, y); должна быть printf("%d %d ", *x, *y);, для x и y: int*
  3. В функции 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;
}
0 голосов
/ 07 ноября 2018
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);
}
0 голосов
/ 07 ноября 2018

В fun1 выражение &x является указателем на указатель . Это типа int **.

Вы не должны использовать там оператор адреса, поскольку 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)
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...