C++指针将值传递到函数中并忽略 CIN 操作
C++ pointers passing values into a function and ignoring cin operations
我正在试验指针并创建了此示例,我不明白为什么这不起作用。有人可以解释为什么当我在没有引用的情况下传递值时该函数不执行 cin 操作吗?
#included proper headers and stuff
...
int main()
{
int a, b;
swap(a,b);
cout << "A: " << a << endl;
cout << "B: " << b << endl;
return 0;
}
void swap(int * p1, int *p2)
{
cin >> *p1;
cin >> *p2;
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
结果CIN被跳过答: 0乙: 0
呃。您正在预期指针的位置传递整数。swap()
函数使用这些未初始化整数中的(随机垃圾)值作为机器地址,并将数据写入这些地址。当然,这不会改变你传递的整数中的值 - 它会改变内存中的其他随机位置。通常,此类程序会因违反分段而崩溃;你只是幸运(或不幸)。
如果您将指针传递给整数(即swap(&a, &b)
),它会起作用,但我认为您已经了解这种情况。
您应该传递变量的地址,而不是变量本身。
int a, b;
swap(&a,&b);
注意与号
它
实际上应该是swap(&a,&b)
.始终对指针有引用,您的指针 p1 和 p2 实际上并不引用任何有效位置。
您跳过的程序部分可能有以下行:
using namespace std;
它还可能有以下行,这将是必需的:
extern void swap(int * p1, int *p2);
using
声明将std
中的所有符号都纳入范围。具体来说,它带来了std::swap
.main
中的swap
行调用std::swap(int&, int&)
而不是预期的。
此错误因您错误地调用自己的交换而变得更加复杂。如果要调用您的交换,您必须 a) 在使用前声明它,并且 b) 正确调用它。
试试这个程序:
#include <iostream>
extern void swap(int*, int*);
int main()
{
int a, b;
swap(&a,&b);
std::cout << "A: " << a << "n";
std::cout << "B: " << b << "n";
return 0;
}
void swap(int * p1, int *p2)
{
std::cin >> *p1;
std::cin >> *p2;
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 对字符串进行位操作
- Problems with std::cin.fail()
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 由cin中的字符串中未捕获空白引起的分割错误
- 为什么未定义 cin 操作
- 对于交错的cout和cin操作,显式刷新是必需的吗
- Visual Studio 中的 Cin 操作错误
- C++指针将值传递到函数中并忽略 CIN 操作
- 如何使用大量 std::cin 和 std::cout 操作重构程序