C++函数与指针

指针作参数

指针参数可以通过传值或者传址的方式传递,如:

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;
}

运行结果:

 

posted @ 2020-04-16 13:16  川尘  阅读(390)  评论(0编辑  收藏  举报
`