繁体   English   中英

如何使用指针在 C++ 中创建输入法

[英]How to create an input method in C++ with pointers

我想创建一个输入法,用指针创建两个整数。 如果您能帮助我或给我任何提示,那就太好了。 :)

我的方法:

void inputTest(int* x, int* y) {
    cin >> x;
    cin >> y;
}

我的主要:

int *x = 0;
int *y = 0;
cout << "Input: " << endl;


//set input from user x,y with input method 
inputTest(x,y);

首先,您要读取int s,而不是int* s,因此您需要取消引用指针:

void inputTest(int* x, int* y) {
    cin >> *x;
    cin >> *y;
}

然后你需要将有效指针传递给 function - 你的是null 指针并且根本没有指向任何地方。
最好的方法是首先创建两个int ,然后使用“address-of”运算符&获取它们的位置。

int x = 0;
int y = 0;
cout << "Input: " << endl;
inputTest(&x, &y);

我是指针的新手,所以我想这样尝试.. :)

好的,那么第一课:不要在不必要的时候使用指针。 指针可能会导致最讨厌的错误,如果没有它们,您将无法获得这些错误。

Next: 指针只是指针。 罐头指向某物。 一个int*可以指向一个int 你的指针没有指向任何有意义的东西。

要存储 integer 值,您需要int某处。 有指向某处的指针是不够的。 一旦你有一个int ,例如int x; 然后&x会给你一个int*x的地址( &被称为地址运算符,但不要混淆, &可以有不同的含义,见下文)。 如果你有指针, int* p = &x; 然后你可以取消引用指针来取回 x: *p = 5; x的值设置为5 使用它你可以写

void inputTest(int* x, int* y) {
    std::cin >> *x;    
    std::cin >> *y;
}
int main() {
   int x,y;
   inputTest(&x,&y);
   std::cout << x << " " << y;
}

BUT (想让它更加大胆,因为它确实是一个很大的“但是”)。 有一个替代方案,这就是你应该在这里使用的。 当“不指向任何地方”是允许的参数时,指针作为参数很有用。 对于想要从用户读取输入并将其存储在某个地方的函数来说,无效指针几乎没有用处。 更好的是禁止此类无效输入并使用引用:

void inputTest(int& x, int& y) {
    std::cin >> x;    
    std::cin >> y;
}
int main() {
   int x,y;
   inputTest(x,y);
   std::cout << x << " " << y;
}

我觉得写这个答案有点不好,因为当你对指针完全陌生时,在这里阅读答案不足以得到正确的理解。 拿一本书读一读。

您需要取消对指针的引用,以便将值分配给 memory 中的指向位置。

void inputTest(int* xptr, int* yptr) {
    cin >> *xptr;
    cin >> *yptr;
}

int* x = 0创建指向 memory 中位置 0 的指针。 相反,我们要分配 memory,然后指向那个 memory。 我们可以将 x 初始化为int x = 0 ,然后使用 &x 获取指向它的指针。

int x = 0;
int y = 0;
cout << "Input: " << endl;
inputTest(&x,&y);

您还可以使用参考...

void inputTest(int& x, int& y) {
    cin >> x;
    cin >> y;
}

int x = 0;
int y = 0;
cout << "Input: " << endl;
inputTest(x,y);

您可以选择以下两种方式之一:

  1. 将您的变量声明为常规int并将它们的地址传递给 function inputTest()这是推荐的方式。

  2. 将变量声明为指向int的指针,并为它们分配有效的 memory。

方法 1 的示例:

int x = 0;
int y = 0;
cout << "Input: " << endl;


//set input from user x,y with input method 
inputTest(&x, &y);

方法 2 的示例:

int *x = new int;
int *y = new int;
cout << "Input: " << endl;


//set input from user x,y with input method 
inputTest(x,y);

完成后不要忘记释放/删除分配的 memory。

你也应该使用:

cin >> *x;
cin >> *y;

在你的 function 里面。

带指针的解决方案

使用int *x = 0您只声明了一个指向无处的指针。 并且指针应仅存储“指向”信息,而不是数据本身。

    void inputTest(int* x, int* y) {
        cin >> *x; // dereference a pointer to get to the 'real' variable
        cin >> *y; // this is also a disadventage of pointers, pointer can point to nowhere, 
                   // and your programwould crach in that situation
    }

    int main()
    {
       int x = 0; // declare a normal variable, instead of a pointer
       int y = 0; 

       cout << "Please insert an input: " << endl;

       inputTest(&x, &y); // pass addresses that point to your variables

       cout << "Your input: " << x << " " << y << endl;
    }

有参考的解决方案

您还可以通过引用实现相同的功能。 也许你会喜欢他们。

    void inputTest(int& x, int& y) // mind & instead of *
    {
        cin >> x; // no need of dereferencing,
        cin >> y;
    }

    int main()
    {
       int x = 0; // a normal variable
       int y = 0; 

       cout << "Please insert an input: " << endl;

       inputTest(x, y); // simple pass your variables

       cout << "Your input: " << x << " " << y << endl;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM