• 21年4月19数组与指针(一)


    1.const  与   *

    2.指针类型

    3.数组名与数组首地址

    ps :  指针加1,应该说是指针偏移一个单位,这个单位大小就是指针的类型

    注意区分 指针 与 指针的类型  https://blog.csdn.net/weixin_44781107/article/details/89405934

    1.const  与   *

    const  int  *  p1 = &a;

    int  *  const  p2=&a;

    const 在 * 左边的时候,限制 * .     也就是限制指向(解引用)的能力,表现在p1的地址变量可以修改(p1=&b;),可以读a的值,但是不能对a赋值

    const 在 * 右边的时候,限制 p2 .  也就是限制指针自身(指针就是地址),表现在p2的地址变量不可以修改(p1=&b;不通过),可以读a的值,可以对a赋值(赋值就是解引用的能力)。

    指针 ≠ 指针变量

    指针就是地址,指针变量就是存储地址的变量。就和整型与整型变量的关系。

    2.指针类型

    野指针       int *p;                   定义的时候没有初始化

    空指针       int *p=nullptr;       定义的时候初始化为空

    失效指针   int *p = (int*)malloc(sizeof(int)*n);

         free(p);

         完成这两句后就是失效指针。(内存释放了,但是该指针任然指向该内存的地址)(很危险)

    3.数组名与数组首地址

    下图的  ar++;   ar=ar+11;   这些操作是违法的,为什么?

    数组名作为数组首地址的时候,自身是常性值,就是不能改变自身的值,这两个语句都改变了自身的值

    但是为啥ar+1,  &ar+1   可以显示出结果?

    因为是在这个值的基础上进行运算得出的结果,这个过程并没有改变常性值的自身。

    ar   是     数组首元素的地址(和&arr[0]一样)     所以加一加了4字节

    &ar是     整个数组ar的地址。          所以加一加了20字节(整个数组的大小)

    值相同,但是“意义不同”

    Linux学习笔记
  • 相关阅读:
    pandas学习
    Scala类详述
    1G-4G的介绍及eclipse中Android工程目录介绍
    Day01
    Linux系统BackSpace 、方向键的问题
    SEL数据类型,@selector的用法,以及调用SEL
    git本地仓库与github远程仓库链接协议问题
    Linux下包含头文件的路径问题与动态库链接路径问题
    c++中basic_istream::getline()的返回值何时为真
    c++标准库函数equal_range()
  • 原文地址:https://www.cnblogs.com/zealwang/p/14679108.html
Copyright © 2020-2023  润新知