如何在 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;
}
然后您需要将有效指针传递给该函数 - 您的指针是 空指针,根本没有指向任何地方。
最好的方法是首先创建两个 int
,然后使用 "address-of" 运算符获取它们的位置,&
.
int x = 0;
int y = 0;
cout << "Input: " << endl;
inputTest(&x, &y);
您可以选择以下两种方式之一:
将您的变量声明为常规 int
s 并将它们的地址传递给函数 inputTest()
,这是推荐的方式。
将您的变量声明为指向 int
的指针并为它们分配有效内存。
方法 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);
完成后不要忘记 release/delete 分配的内存。
你还应该使用:
cin >> *x;
cin >> *y;
在你的函数中。
I'm new to pointers so I want to try it that way.. :)
好的,那么第一课:不要在不必要的时候使用指针。指针可能会导致最严重的错误,没有它们就不会出现这些错误。
下一篇:指针就是指针。可以指向某物。 int*
可以指向int
。你的指针没有指向任何有意义的东西。
要在某个地方存储整数值,您需要 int
s。有指向某处的指针是不够的。一旦你有一个 int
,例如 int x;
那么 &x
会给你一个 int*
即 x
的地址(&
被称为地址-of 运算符,但不要混淆,&
可以有不同的含义,见下文)。如果你有指针 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(想加粗一点,因为确实是大"but")。有一个替代方案,这是您应该在这里使用的。当 "not pointing anywhere" 是允许的参数时,指针作为参数很有用。对于想要从用户读取输入并将其存储在某处的功能,无效指针几乎没有用处。最好是禁止此类无效输入并使用引用:
void inputTest(int& x, int& y) {
std::cin >> x;
std::cin >> y;
}
int main() {
int x,y;
inputTest(x,y);
std::cout << x << " " << y;
}
我觉得写这个答案有点不好,因为当你完全不熟悉指针时,阅读这里的答案不足以获得正确的理解。拿一本书并阅读它。
您需要取消对指针的引用,以便将值分配给内存中的指向位置。
void inputTest(int* xptr, int* yptr) {
cin >> *xptr;
cin >> *yptr;
}
int* x = 0
创建一个指向内存位置 0 的指针。相反,我们想要分配内存,然后指向该内存。我们可以将 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);
带指针的解决方案
使用 int *x = 0
你只是声明了一个指向任何地方的指针。指针只存储 'pointing' 信息,而不是数据本身。
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;
}
我想创建一个输入法,它使用指针创建两个整数。 如果你能帮助我或给我任何提示,那就太好了。 :)
我的方法:
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;
}
然后您需要将有效指针传递给该函数 - 您的指针是 空指针,根本没有指向任何地方。
最好的方法是首先创建两个 int
,然后使用 "address-of" 运算符获取它们的位置,&
.
int x = 0;
int y = 0;
cout << "Input: " << endl;
inputTest(&x, &y);
您可以选择以下两种方式之一:
将您的变量声明为常规
int
s 并将它们的地址传递给函数inputTest()
,这是推荐的方式。将您的变量声明为指向
int
的指针并为它们分配有效内存。
方法 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);
完成后不要忘记 release/delete 分配的内存。
你还应该使用:
cin >> *x;
cin >> *y;
在你的函数中。
I'm new to pointers so I want to try it that way.. :)
好的,那么第一课:不要在不必要的时候使用指针。指针可能会导致最严重的错误,没有它们就不会出现这些错误。
下一篇:指针就是指针。可以指向某物。 int*
可以指向int
。你的指针没有指向任何有意义的东西。
要在某个地方存储整数值,您需要 int
s。有指向某处的指针是不够的。一旦你有一个 int
,例如 int x;
那么 &x
会给你一个 int*
即 x
的地址(&
被称为地址-of 运算符,但不要混淆,&
可以有不同的含义,见下文)。如果你有指针 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(想加粗一点,因为确实是大"but")。有一个替代方案,这是您应该在这里使用的。当 "not pointing anywhere" 是允许的参数时,指针作为参数很有用。对于想要从用户读取输入并将其存储在某处的功能,无效指针几乎没有用处。最好是禁止此类无效输入并使用引用:
void inputTest(int& x, int& y) {
std::cin >> x;
std::cin >> y;
}
int main() {
int x,y;
inputTest(x,y);
std::cout << x << " " << y;
}
我觉得写这个答案有点不好,因为当你完全不熟悉指针时,阅读这里的答案不足以获得正确的理解。拿一本书并阅读它。
您需要取消对指针的引用,以便将值分配给内存中的指向位置。
void inputTest(int* xptr, int* yptr) {
cin >> *xptr;
cin >> *yptr;
}
int* x = 0
创建一个指向内存位置 0 的指针。相反,我们想要分配内存,然后指向该内存。我们可以将 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);
带指针的解决方案
使用 int *x = 0
你只是声明了一个指向任何地方的指针。指针只存储 'pointing' 信息,而不是数据本身。
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;
}