zoukankan      html  css  js  c++  java
  • 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;
    }

    运行结果:

  • 相关阅读:
    同一个硬盘安装win10+ubuntu双系统
    Bundle
    layout_weight属性
    Java反射机制
    Android——Widget实现
    Android——悬浮窗+侧边弹框+淡入淡出+背景shape+SeekBar调节手机亮度
    Android权限总结
    Android——窗口层控制WindowManager.LayoutParams.type
    Android——getSystemService
    Eclipse UML插件——AmaterasUML
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12708755.html
Copyright © 2011-2022 走看看