zoukankan      html  css  js  c++  java
  • 数组和指针(sizeof两者的关系)

    《c和指针》还有对其他博客的参考

     

    数组很常见,int b[4]中 b[4]是整形,b类型是什么呢?

    正常思考方式,b应该是表示整个数组,但是我们使用数组名字b的过程中,几乎所有都是一个指针常量,就是数组第一个元素的地址,即&b[0]

    但不要以此以为数组和指针是相同的。

    只有在两种场合下,数组名不用指针常量表示,其他都是一个常量指针,也称为数组的 “退化” 。两种场合为:

    1:  sizeof(b)

    2:    &b

    第一种举例:

    1   int b[4] = {0};
    2   printf("%d
    ",sizeof(b));

    输出结果为16,是整个数组的长度,如果b是常量指针,结果应该是指针地址的长度4,(长度取决于机器)

    如果输出sizeof(b)/sizeof(b[0])  结果是4

     

    第二种: &b,用指针指向b会出错

    1   int b[4] = {0};
    2   int *p=&b

      编译出错显示error: cannot convert  'int (*)[4]'  to   ’int*‘

      不能把整数数组指针赋值给整数指针,说明&b 产生的是一个指向数组的指针;sizeof(&b)的大小是4 就是指针的大小

      其他情况b是指&b[0] ,例如

      

    1 #include<stdio.h>
    2 int main()
    3 {
    4   int b[4] = {4,3,2,1};
    5   printf("%d %d %d
    ",*b+1,*(b+1),*b);
    6 }

      结果是 5 3 4

      *b+1是指 *(&b[0])+1  对首地址指针解引用再加1

      *(b+1) 是指  *(&b[0]+1*sizeof(int))   指针加1的解引用就是b[1]的值  //( 指针+n 是指针后移n*指针指向的类型字节   最好不要超过数组最后一位)

      *b = *(&b[0])

     

     

     

  • 相关阅读:
    get通配符
    常用正则表达式(合)
    2.A star
    1.序
    机器人运动规划04《规划算法》
    机器人运动规划03什么是运动规划
    6.2 性能优化
    6.1 内存机制及使用优化
    5.9 热修复技术
    5.8 反射机制
  • 原文地址:https://www.cnblogs.com/9527s/p/10806065.html
Copyright © 2011-2022 走看看