对指针的理解2

来源:互联网 发布:培训班java教哪些课程 编辑:程序博客网 时间:2024/06/05 08:25

     char *p[4];是指针数组,原因:

  • 优先级 () > [ ] > * ,p先和[] 结合,p是数组名,*表示数组元素是指针,char 表示指向的是字符变量;
  • 从名字上也可以看出,“指针数组”,核心是数组,指针只是修饰部分,即总体上是一个数组。

        sizeof(p)是16,因为数组里放的是指针,也就是地址,每个地址占4个字节。同理 如果是int *p[4] 或者 double *p[4],sizeof(p)都是16。

 

       p+1 移动4个字节。因为p是数组名,p加1后,(p+1)指向p[1],又因为存放的地址占4个字节,因此只移动4个字节。

p是一个二级指针,原因:p是数组名,存放的是数组第一个元素的地址,即 &p[0],又因为p[0]本身是char *类型,所以p的类型是char**,后一个*表示p是一个指针,前面的char *表示p指向的数据类型是char*,即p指向一个字符指针。

      即 char ** s = p;是合法的。s++ 此时s指向p[1]。

      sizeof(char*)的结果是4,sizeof(double)也是4.

注意:多级指针加1,移动4个字节。只要是指针,都占4个字节。

原创粉丝点击