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字节(整个数组的大小)

 

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

 

posted @ 2021-04-19 22:52  没壳的蜗牛  阅读(48)  评论(0编辑  收藏  举报