#include <iostream>
void swap (int *a, int *b) {
int *k = a;
a = b;
b = k;
}
int main() {
int alpha = 5;
int beta = 34;
swap (alpha,beta);
std::cout << alpha << std::endl;
std::cout << beta << std::endl;
int *ab = new int();
*ab = 34;
int *cd = new int();
*cd =64;
swap(ab,cd);
std::cout << *ab << std::endl;
std::cout << *cd << std::endl;
}
第一个问题:如何将值传递给具有指针作为传递参数的函数。
第二个问题:如何交换。它交换了指针。但是当它出现时,不应该保持alpha和beta的值仍然相同。
第三个问题:当我传递指针时,为什么函数不起作用,但是当我传递常规变量时,它起作用。
第四个问题:函数void swap(int *a, int* b)
中有int *a
和int *b
引用?
答案 0 :(得分:4)
这就是为什么我们不应该在全局范围内包含命名空间std的最佳例子......
swap (alpha,beta);
会拨打std::swap
而不是您自己的swap
。
第三个问题:为什么当我传递指针时函数不起作用,但是当我传递常规变量时它起作用
因为您的swap
编写不正确。它应该是:
void swap (int *a, int *b) {
// Preferably you should also check if pointers are not NULL.
int temp;
temp = *a;
*a = *b;
*b = temp;
}
第四个问题:函数
void swap(int *a, int* b)
中有int *a
和int *b
引用吗?
参考语法为:
void swap ( int& a, int& b );
所以不,他们不是。他们是指针。
答案 1 :(得分:1)
首先你的交换功能是错误的。我想你想要交换不是指针本身,而是指针指向的对象。它应该被定义为
void swap ( int *a, int *b )
{
int k = *a;
*a = *b;
*b = k;
}
可以像
一样调用swap ( &alpha, &beta );
和
swap( ab, cd );
在这个函数中,参数a和b是指针。如果你想使用引用作为参数,那么函数将看起来像
void swap( int &a, int &b )
{
int tmp = a;
a = b;
b = tmp;
}
可以像
一样调用swap ( alpha, beta );
和
swap( *ab, *cd );
如果要交换分离指针和指针指向的对象,则需要定义两个重载函数或一个模板函数,如标准C ++函数std::swap
。