20240416(指针变量的相关学习)

指针:
    1.指针能够让程序更加简洁
    2.指针能够让程序更加高效
    3.指针提供了一种间接访问变量的方式

1.指针的基本概念

int num;

num

地址:用来区分不同内存字节空间的一个编号
指针:指针就是地址,地址就是指针,  地址是一个编号,指针多了指向的概念
指针变量:一个用来存放指针(地址)的变量,使用变量就是使用变量中存放的指针,所以有时也将指针变量简称为指针

2.指针相关的运算符:
    &:获得变量在内存空间中的首地址
    注意:
        1.只能对变量&操作
        2.&运算符连接表达式的结果为该变量在内存空间中的首地址
        3.&运算符会让类型升级
            int -> int *
            double -> double *
            char -> char *
    
    *:左值:将右值放入指针指向的空间
      右值:直接取指针对应空间中的值

    注意:
        1.只能对指针进行 * 操作
        2.*运算符能够让类型降级
        3.对int *       *运算符获得该地址开始向下4字节空间中的值
          对double *    *运算符获得该地址开始向下8字节空间中的值
          对char *      *运算符获得该地址开始向下1字节空间中的值

        int * -> int 
        double * -> double 
        char * -> char 

    *p = 100;       //左值
    *p;             //右值
    *(p+1);         //右值
    num = *p;       //右值

        如果*和&同时出现,等价于去掉*&运算符后的结果

3.指针变量的定义:
    数据类型 *变量名;

    int *p;
    double *p;
    char *p;

    指针均占8个字节,int* 指向4字节空间, double* 指向8字节空间, char* 指向1字节空间

    在64位操作系统中,所有指针均占8个字节

    int *p, *q;

    野指针:未经初始化的指针或指向已经被释放过空间的指针

    注意:
        不要使用未经初始化的指针

4.指针的初始化
    int *p = NULL;

    NULL:空指针(指向内存地址为0x0的指针)

    int num = 100;
    int *p = #

    int *p = NULL;
    p = #

    练习:从终端接收2个数,利用指针操作这两个数完成四则运算并打印结果



5.指针的算数运算:
    +
    -
    ++
    --

    ++:向内存高地址偏移指向数据类型大小个字节空间
    --:向内存低地址偏移指向数据类型大小个字节空间

    两个相同类型的指针相减:获得两个地址中间相差了多少个该类型的元素

6.指针常见的操作:
    int a = 100;
    int b = 200;
    int *p = NULL;
    int *q = NULL;

    p = &a;
    q = &b;

    1.p = &b;
    2.*p = b;
    3.p = q;
    4.*p = *q;

    指针中:
        1.指针变量本身,也就是p,修改p的值可以改变指针变量的指向
        2.指针变量指向的空间,也就是*p,修改*p的值并不能改变指针变量的指向,只是利用指针修改对应空间中的值


7.指针作为函数参数:
    1.值传递:
        实参将值传递给形参,形参改变,实参不会受影响

        函数体内想使用函数体外部变量值的时候使用复制传递(赋值传递)

    2.地址传递
        实参将地址给形参,形参是实参的指针,可以通过对形参取*改变实参的值

        函数体内想修改函数体外部变量值的时候使用地址传递

    练习:
        封装一个函数,传入一个整形数组,并获得该数组中的最大值和最小值
        int GetMinMaxNum(int array[], int len, int *pmin, int *pmax);



8.指针和数组的关系:
    指针和一维数组的关系:

    int a[5] = {1, 2, 3, 4, 5};
    int *p = NULL;

    p = &a[0];
    p = a;

    数组的数组名是指向数组第一个元素的指针常量
    a == &a[0]
    int *

    访问数组下标为n的元素:
    a[n] == *(a+n) == *(p+n) == p[n]

    指针[偏移量] == *(指针 + 偏移量)

9.数组作为函数参数:
    int a[5] = {1, 2, 3, 4, 5};

    第一种:
    int fun(int array[], int len);

    第二种:
    int fun(int array[5]);

    第三种:
    int fun(int *parray, int len);

    注意:
        三种形式均传入的是指针,最好使用第三种



 

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值