我正在为即将到来的考试学习C ++指针,但我不知道为什么这里的第一个代码不会交换值,但第二个代码却没有。如果有人能向我解释为什么那会很棒。
为什么这个程序不会交换b [0]和b [1]的值:
#include <iostream>
using namespace std;
void func1 (int* x, int *y)
{
int* temp = x;
x = y;
y = temp;
}
int main()
{
int b[6] = { 1, 2, 3, 4, 5, 6};
func1(&b[0], &b[1]);
cout << b[0] << b[1];
}
但是这个确实:
#include <iostream>
using namespace std;
void func2(int* x, int *y)
{
int temp = *x;
*x = *b;
*y = temp;
}
int main()
{
int b[6] = { 1, 2, 3, 4, 5, 6};
func2(&b[0], &b[1]);
cout << b[0] << b[1];
}
谢谢:D
答案 0 :(得分:1)
解释是,在第一种情况下,您正在交换指向值的指针,而不是指向值本身。 所以你在第一种情况下操纵地址,而在第二种情况下,你操纵值。