17.C++指针(2)

const修饰指针

const修饰指针有三种情况:
1、const修饰指针——常量指针
const int * p = &a ;
特点:指针的指向可以修改,但是指针指向的值不可以修改
2、const修饰变量——指针常量
int * const p = & a ;
特点:指针指向的值可以修改,但是指针的指向不可以修改。
3、const即修饰指针又修饰常量
const int * const p = &a ;
特点:指针的指向和指针指向的值都不可以修改。

示例:

#include 
using namespace std;
int main()
{
    int a = 10;
    int b = 10;

    const int* p = &a;
    //指针指向的值不能改变,指针的指向可以改变。
    p = &b;
    //*p = 20;//错误,指针指向的值不可以改变
    
    //指针的指向不可以改变,指针指向的值可以改变。
    int* const  p2 = &a;
    *p2 = 100;
    //p2 = &b;// 错误,不能改变指向
    
    //指针的指向和指向的值都不可以改变。
    const int* const p3 = &a;
    //*p3 = 20;// 错误
    //p3 = &b; // 错误

    return 0;
}

指针和数组

作用:利用指针访问数组中的元素。

#include 
using namespace std;
int main()
{
    
    int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
    //arr就是数组的首地址,即数组第一个元素的地址
    int* p = arr;//利用指针访问数组中的第一个元素
    
    //利用指针访问数组中的第二个元素,可以让指针向后偏移4个字节
    p++;
    cout << "数组中的第二个元素:" << *p << endl;

    //利用指针遍历数组
    int* p2 = arr;
    for (int i = 0; i < 10; i++)
    {
        cout << *p2 << endl;
        p2++;
    }
    return 0;
}

指针和函数

作用:利用指针做函数参数,可以修改实参的值

#include 
using namespace std;
void swap(int *p1, int *p2)
{
    int temp = *p1;
     *p1= *p2;
     *p2 = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    
    //地址传递
    //如果是地址传递,可以修饰实参
    swap(&a, &b);
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    
    return 0;
}

总结:如果不想改变实参,使用值传递,如果想要改变实参,使用引用传递。

指针、数组、函数

​ 案例描述:封装一个函数,利用冒泡排序,实现对整形数组的升序排序
​ 数组为:int arr[10] = {2,4,3.1.7.6.5.8.10,9}

#include 
using namespace std;
//冒泡排序函数
void bubbleSort(int* arr ,int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
//打印输出函数
void print_array(int* arr ,int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << " " << arr[i];
    }
}
int main()
{
    int arr[10] = { 2,4,3,1,7,6,5,8,10,9 };
    //数组长度
    int len = sizeof(arr) / sizeof(arr[0]);
    //创建冒泡排序函数
    bubbleSort(arr, len);
    //打印排序后的数组
    print_array(arr, len);
    
    return 0;
}

你可能感兴趣的:(17.C++指针(2))