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

    运行结果:

  • 相关阅读:
    Java通过socket和DTU,RTU连接工业传感器通信
    没有远程桌面授权服务器可以提供许可证 相关,注册表项获得权限方法
    freertos内存pvPortMalloc 和 malloc 区别 ,以及全局变量占用情况
    自学it吧论坛
    安全学习地址
    服务器zfs文件系统修复过程记录
    第1年10月11日 android canvas
    第1年10月9日 swiftui
    第1年9月28日 Android 4.4以后,浏览器内核采用的chromium,可以支持webrtc
    第1年9月19日 ios librtmp
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12708755.html
Copyright © 2020-2023  润新知