指针作参数
指针参数可以通过传值或者传址的方式传递,如:
void function(int* p1, int* &p2) //等价于 //typedef int* intPointer //void function(intPointer p1, intPointer& p2)
在上面的例子中,需要注意:如果调用了上面的函数并且传入指针参数q1和q2。
function (q1, q2)
先来看p1和q1。因为p1是按值传递,所以p1和q1是两个不同的指针,但是他们指向的地址是相同的。举个例子,如果我更改p1,那么q1不会改变;但是如果这样修改:
*p1 = 10,那么*q1的值也变为了10,因为他们指向的一个地址。虽然q1未改变,但是其指向位置的内容变了。
再来看p2和q2。因为p2是按址传递,所以p1和q1是两个相同的指针。也就是说,任何的变化都是同步的。
注:由于数组名就是一个常量指针,所以可以直接作为参数传入。
指针作返回值
作为一种数据类型,指针也是可以作为函数的返回值的。
例如一个简单的函数:
int* returnPointer(int* p) { return p; }
当然实际写程序不可能这么写,这样写只是为了演示。
一般来说,作为函数返回值的指针很多都是一个数组名。
数组函数
下面的函数包含在头文件<algorithm>中
函数名 | 描述 |
min_element | 返回数组中的最小值 |
max_element | 返回数组中的最大值 |
sort | 排序数组 |
random_shuffle | 将数组随机重排 |
find | 查找元素 |
#include <iostream> #include <algorithm> using namespace std; void printArray(const int* list, int size){ for(int i = 0; i < size; i++) { cout << list[i] << " "; } cout << endl; } int main() { int list[] = {2, 3, 5, 6, 1, 4}; cout << "原数组为:"; printArray(list, 6); int* min = min_element(list, list+6); int* max = max_element(list, list+6); cout << "最小的值是" << *min << ",它的位置是" << (min-list) << endl; cout << "最大的值是" << *max << ",它的位置是" << (max-list) << endl; random_shuffle(list,list+6); cout << "随机重排后的数组为:"; printArray(list, 6); sort(list,list+6); cout << "排序后的数组为:"; printArray(list, 6); int* p = find(list, list+6, 3); if (p != list+6){ cout << *p << "在数组中的位置是" << (p-list) << endl; } else{ cout << *p << "未出现在数组中" << endl; } return 0; }
运行结果: