【问题标题】:How do I make this pointer work?如何使这个指针工作?
【发布时间】:2018-10-21 14:31:25
【问题描述】:

我有两个功能。一个叫play_card,一个叫scan_card。

如您所见,在 scan_card 函数中,它扫描 3 个数字。但是,我需要将这三个数字返回给 play_card。如何用指针做到这一点?

void play_card(void) {

    int card_one;
    int card_two;
    int card_three;

    int card_array[] = {0};

    // Calls the scan_card function
    play_scanner(card_array);
    }

// Scans in the cards a user puts in
void scan_card(int card_array[]) {

    int num1;
    int num2;
    int num3;

    scanf("%d %d %d", &num1, &num2, &num3);

    *card_one = num1;
    *card_two = num2;
    *card_three = num3;
}

【问题讨论】:

  • card_one 和另外两个在另一个函数中声明,这意味着它们将不可访问。您还需要在每个指针中存储变量的地址,而不是它的值。
  • @Logan 所以我需要在这里存储地址。像这样? void scan_card(int *card_one, int *card_two, int *card_three, int card_array[])
  • 是的,这是一种方法。
  • @Logan 更好的方法是什么?
  • 我会说这种方法。您也可以使用全局变量,但不要经常使用它们。

标签: c function pointers scanf


【解决方案1】:

这是我想到的最简单的实现。

#include <stdio.h>
#include <stdlib.h>

void play_card(void);
void scan_card(int* card_array[]);


int main()
{
    play_card();
    return 0;
}

void play_card(void)
{
    int* card_array[3];

    // Calls the scan_card function
    scan_card(card_array);
    int card_one = *card_array[0];
    int card_two = *card_array[1];
    int card_three = *card_array[2];
    printf("\n%d\n%d\n%d\n" , card_one , card_two , card_three);
}

// Scans in the cards a user puts in
void scan_card(int* card_array[])
{

    int num1;
    int num2;
    int num3;

    scanf("%d %d %d", &num1, &num2, &num3);

    card_array[0] = &num1;
    card_array[1] = &num2;
    card_array[2] = &num3;
}

【讨论】:

    【解决方案2】:

    修正上述答案,

    这应该可以满足您的需要

    #include <stdio.h>
    #include <stdlib.h>
    
    void play_card(void);
    void scan_card(int* card_array);
    
    
    int main()
    {
        play_card();
        return 0;
    }
    
    void play_card(void)
    {
        int card_array[3];
    
        // Calls the scan_card function
        scan_card(card_array);
        int card_one   = card_array[0];
        int card_two   = card_array[1];
        int card_three = card_array[2];
        printf("\n%d\n%d\n%d\n" , card_one , card_two , card_three);
    }
    
    // Scans in the cards a user puts in
    void scan_card(int *card_array)
    {
    
        int num1;
        int num2;
        int num3;
    
        scanf("%d %d %d", &num1, &num2, &num3);
    
        card_array[0] = num1;
        card_array[1] = num2;
        card_array[2] = num3;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      void play_card(void) {
      
      int card_one;
      int card_two;
      int card_three;
      
      int card_array[] = {0};
      
      // Calls the scan_card function
      play_scanner(card_array,&card_one,&card_two,&card_three);
      }
      void scan_card(int card_array[],int *card_one,int *card_two,int* card_three) 
      {
      
      int num1;
      int num2;
      int num3;
      
      scanf("%d %d %d", &num1, &num2, &num3);
      
      *card_one = num1;
      *card_two = num2;
      *card_three = num3;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 2021-03-22
        相关资源
        最近更新 更多