为什么这个程序不会改变任何东西,但它下面的那个改变了什么?

时间:2016-02-06 01:23:47

标签: c++ pointers

我正在为即将到来的考试学习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

1 个答案:

答案 0 :(得分:1)

解释是,在第一种情况下,您正在交换指向值的指针,而不是指向值本身。 所以你在第一种情况下操纵地址,而在第二种情况下,你操纵值。