C++学习 2 指针

指针:指针保存的是数据的地址; 

#include<iostream>
using namespace std;
int main()
{
    //1、定义指针
    int a = 10;
    //指针定义的语法:数据类型 * 指针变量名;
    int * p;
    //让指针记录变量a的地址
    p = &a;
    cout << "a的地址为:" << &a << endl;
    cout << "指针p为:" << p << endl;


    //2、使用指针
    //可以通过解引用的方式来找到指针指向的内存
    //指针前加 * 代表解引用,找到指针指向的内存中的数据
    *p = 1000;     //解引用指针p,找到p里的数据,并赋值1000
    cout << "a=" << a << endl;
    cout << "*p=" << *p << endl;
    return 0;
}

空指针:指针变量指向内存中编号为0的指针;

    作用:  初始化指针变量;

    注意:  空指针指向的内存是不可以访问的。0~255之间的内存编号是系统占用的,因此不可访问;

野指针:指针变量指向非法的内存空间;在程序中,应尽量避免使用野指针;

 

 

 const修饰指针:

  const修饰指针有三种情况:(左定值,右定向 )

    1、const修饰指针  ---  常量指针      const在指针左侧,指针的值不可以修改,但指向可以修改。

          eg:   const int * p = &a;

               *p = 20;  // 错误,指针指向的值不可以修改

                p = &b;  // 正确,指针的指向可以修改

 

 

 

    2、const修饰常量  ---  指针常量      const在指针右侧,指针的指向不可以修改,但值可以修改。

       eg:   int * const p = &a;

            *p = 20;  // 正确,指针指向的值可以修改

             p = &b;  // 错误,指针的指向不可以修改

    3、const即修饰指针又修饰常量       指针的指向和指向的值都不可以改

       eg:   const int * const p = &a;

            *p = 20;  // 错误,指针指向的值不可以修改

             p = &b;  // 错误,指针的指向也不可以修改

 

指针和数组

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

 

#include<iostream>
using namespace std;
int main()
{

    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    
    cout << "第一个元素:" << arr[0] << endl;

    int * p = arr;      //指向数组的指针,arr就是数组首地址
    cout << "指针访问的第一个元素:" << *p << endl;

    p++;               //指针向后偏移4个字节
    cout << "指针访问的第二个元素:" << *p << endl;

    cout << "利用指针遍历数组" << endl;

    int * p2 = arr;

    for (int i = 0; i < 10; i++)
    {
        //cout << arr[i] << endl;
        cout << *p2 << endl;
        p2++;
    }

    system("pause");
    return 0;
}

 

指针和函数

#include<iostream>
using namespace std;

void swap01(int a , int b)         //值传递
{
    int temp = a;
    a = b;
    b = temp;

    cout << "swap01 a=" << a << "   " << "swap01 b=" << b << endl;       //swap01 a=20,swap01 b=10形参发生改变
}

void swap02(int * p1 , int * p2)   //地址传递
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;

    cout << "swap02 a=" << *p1 << "   " << "swap02 b=" << *p2 << endl;   //swap02 a=20,swap02 b=10形参发生改变
}
int main()
{
    //指针和函数
    int a = 10;
    int b = 20;

    //1、值传递
    //swap01(a, b);
    //cout << "a=" << a <<"            " << "b=" << b << endl;           //值传递 a=10,b=20 实参不发生改变(不可修饰实参)

    //2、地址传递
    swap02(&a, &b);
    cout << "a=" << a << "            " << "b=" << b << endl;            //地址传递 a=20,b=10  实参发生改变(可修饰实参)

    system("pause");
    return 0;
}

 

posted @ 2021-08-04 18:07  大白不会敲代码  阅读(58)  评论(0)    收藏  举报