Целочисленные указатели на функцию - PullRequest
0 голосов
/ 28 февраля 2012

У меня тупой вопрос. Я пытаюсь написать программу, которая получит два числа из функции и отправит их обратно на главную, где я смогу их использовать. Однако, когда я запускаю приведенный ниже код, единственные возвращаемые значения всегда равны нулю. Стоит ли менять указатели?

#include <stdio.h>

void get(int *num1, int *num2);

int main(void)
{
    int num1, num2, input;
    get(&num1, &num2);

    printf("Num1 is %d and num2 is %d.\n", num1, num2);
    return 0;
}

void get(int *num1, int *num2)
{
    printf("Enter two numbers. \n");
    printf("Number 1: \n");
    scanf("%d", &num1);

    printf("Number 2: \n");
    scanf("%d", &num2);
    printf("In function, %d and %d.\n", num1, num2);

    return;
}

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Во-первых, есть нет глупых вопросов.Ну, есть, но это не один из них: -)

В get переменные num1 и num2 являются уже указателями на целые числа, выне следует ставить перед ними префикс &.

Однако, вы должны разыменовать указатели в printf внутри функции.Чтобы узнать, как это сделать, см. Следующий код (вместе с некоторыми косметическими изменениями, не имеющими отношения к рассматриваемому вопросу).

#include <stdio.h>

void get(int *num1, int *num2) {
    printf("Enter two numbers.\n");

    printf("Number 1: ");
    scanf("%d", num1);                                   // << No &

    printf("Number 2: ");
    scanf("%d", num2);                                   // << No &

    printf("In function, %d and %d.\n", *num1, *num2);   // Add *'s
}

int main(void) {
    int num1, num2, input;
    get(&num1, &num2);
    printf("Num1 is %d and num2 is %d.\n", num1, num2);
    return 0;
}

Пример выполнения:

Enter two numbers.
Number 1: 5
Number 2: 8
In function, 5 and 8.
Num1 is 5 and num2 is 8.
1 голос
/ 28 февраля 2012

num1 и num2 внутри функции уже являются указателями.

, поэтому внутри scanf измените & num1 на num1 и & num2 на num2.

#include <stdio.h>


void get(int *num1, int *num2);

int main(void)
{
    int num1, num2, input;
    get(&num1, &num2);

    printf("Num1 is %d and num2 is %d.\n", num1, num2);
    return 0;
}

void get(int *num1, int *num2)
{
    printf("Enter two numbers. \n");
    printf("Number 1: \n");
    scanf("%d", num1);

    printf("Number 2: \n");
    scanf("%d", num2);
    printf("In function, %d and %d.\n", num1, num2);

    return;
}
0 голосов
/ 28 февраля 2012

Вы присваиваете значения указателям , а не вещам, на которые они указывают.Попробуйте либо это:

scanf("%d", num1);

или (в C ++) это:

void get(int &num1, int & num2)
{
  ...
  printf("Number 1: \n");
  scanf("%d", &num1);
  ...
  return;
}

int main(void)
{
  ...    
  get(num1, num2);
  ...
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...