6-【快乐学习c++】指针

基础知识

指针就是地址

空指针和野指针
空指针:

(1)、指向编号0的空间
(2)、空指针是给指针变量初始化的
(3)、空指针是不可访问的 (当p是空指针 *p = 100 是不行的)
(4)、0~255号内存编号是系统占用的,不可以直接访问

野指针:
  1. 野指针不可访问 *p
  2. 禁止使用 int * p = (int *)0x1100;
const修饰指针:
    // 5、const修饰指针
    const int * p3 = &a;
    //(1)const修饰指针 -- 常量指针 -- 常量的指针
    //   指针的指向可以修改     p = &b 对
    //   指针指向的值不可以改  *p = 20 错


    int * const p4 = &a;
    //(2)const修饰常量 -- 指针常量 -- 指针是常量
    //   指针的指向不可以修改   p = &b 错
    //   指针指向的值可以改    *p = 20 对

    const int * const p5 = &a;
    //(3)const 都修饰
    //   指针的指向不可以修改   p = &b 错
    //   指针指向的值不可以改  *p = 20 错

程序

#include<iostream>
using namespace std;


void bubbleSort(int * arr,int len);
void printArr(int * arr,int len);
void swap01(int a,int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
void swap02(int *a,int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
/*指针就是地址*/
int main()
{
    // 1、定义指针
    cout << "----------------------------------[part-1 定义指针]" <<endl;
    int a = 10;
    int b = 20;
    // 指针定义语法: 数据类型 * 指针变量名
    int * p;
    int * p2 = &b;
    // 让指针记录变量a的地址
    p = &a;
    cout << "a的地址:" << &a << endl;
    cout << "p:" << p << endl;

    // 2、使用指针
    cout << "\n\n----------------------------------[part-2 使用指针]" <<endl;
    // 解引用
    *p = 1000;
    cout << "a=" << a << endl;
    cout << "*p=" << *p << endl;

    // 3、指针占用的内存空间
    cout << "\n\n----------------------------------[part-3 指针内存]" <<endl;
    cout << "sizeof(int *)=" << sizeof(int *) << endl;
    cout << "sizeof(float *)=" << sizeof(float *) << endl;
    cout << "sizeof(char *)=" << sizeof(char *) << endl;

    // 4、空指针和野指针
    // 空指针:
    //(1)、指向编号0的空间
    //(2)、空指针是给指针变量初始化的
    //(3)、空指针是不可访问的 (当p是空指针 *p = 100 是不行的)
    //(4)、0~255号内存编号是系统占用的,不可以直接访问

    // 野指针:
    //(1)、野指针不可访问 *p
    //(2)、禁止使用 int * p = (int *)0x1100;

    // 5、const修饰指针
    cout << "\n\n----------------------------------[part-5 const修饰指针]" <<endl;
    const int * p3 = &a;
    //(1)const修饰指针 -- 常量指针 -- 常量的指针
    //   指针的指向可以修改     p = &b 对
    //   指针指向的值不可以改  *p = 20 错


    int * const p4 = &a;
    //(2)const修饰常量 -- 指针常量 -- 指针是常量
    //   指针的指向不可以修改   p = &b 错
    //   指针指向的值可以改    *p = 20 对

    const int * const p5 = &a;
    //(3)const 都修饰
    //   指针的指向不可以修改   p = &b 错
    //   指针指向的值不可以改  *p = 20 错

    // 6、指针和数组
    cout << "\n\n----------------------------------[part-6 指针和数组]" <<endl;
    // 利用指针访问数组中的元素
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    cout << "第一个元素" << arr[0] << endl;
    int * p6 = arr;
    cout << "利用指针访问第一个元素" << *p6 << endl;
    p6++;//偏移4个字节
    cout << "利用指针访问第二个元素" << *p6 << endl;

    // 7、指针和函数
    cout << "\n\n----------------------------------[part-7 指针和函数]" <<endl;
    int c = 100;
    int d = 90;

    // 值传递
    swap01(c,d);
    cout << "c = " << c << "   d = "<< d<< endl;
    // 地址传递
    swap02(&c,&d);
    cout << "c = " << c << "   d = "<< d<< endl;

    // 7、小案例
    cout << "\n\n----------------------------------[part-7 案例]" <<endl;
    // 封装一个函数,对整型数组进行排序
    // 定义一个数组
    int arr2[]={4,2,8,0,5,7,1,3,9};
    int lenarr2 = sizeof(arr)/sizeof(arr[0]);
    // 创建函数
    bubbleSort(arr,lenarr2);
    printArr(arr,lenarr2);
}

// 指针、数组、函数

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 printArr(int * arr,int len)
{
    for (int i = 0;i<len;i++)
    {
        cout << arr[i] << endl;
    }
}

输出

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/magic_shuang/article/details/107548021
今日推荐