C++ 数组的大小及其指针的大小意味着什么?

C++ 数组的大小及其指针的大小意味着什么?,c++,pointers,sizeof,C++,Pointers,Sizeof,最近,我读了代码blow,它让我感到困惑 static string const dirs[6] = {"-n", "-ne", "-se", "-s", "-sw", "-nw" }; int a = sizeof(dirs)/sizeof(*dirs); 遗嘱等于数组的大小,即6 所以我的问题是: sizeof(dirs)代表什么?是总数组的大小吗 sizeof(*dirs)代表什么 sizeof(dirs)表示整个数组的大小 sizeof(*dirs)表示数组中单个元素的大小 因此,

最近,我读了代码blow,它让我感到困惑

 static string const dirs[6] = {"-n", "-ne", "-se", "-s", "-sw", "-nw" };
 int a = sizeof(dirs)/sizeof(*dirs);
遗嘱等于数组的大小,即6

所以我的问题是:

  • sizeof(dirs)代表什么?是总数组的大小吗

  • sizeof(*dirs)代表什么

  • sizeof(dirs)
    表示整个数组的大小
  • sizeof(*dirs)
    表示数组中单个元素的大小
  • 因此,sizeof(*dirs)*元素数=sizeof(dirs),因为元素数*每个元素的大小=整个数组的大小

    因此,元素的数量=sizeof(dirs)/sizeof(*dirs)

    是的

    what does sizeof(*dirs) represent?
    
    *dirs
    dirs[0]
    相同,因此
    sizeof(*dirs)
    是第一个元素的大小。(每个元素的大小都是一样的)


    sizeof(dirs)/sizeof(*dirs)
    将是数组中的元素数。

    sizeof
    运算符生成所提供操作数的字节大小。 由于
    *dir
    等于
    dir[0]
    因此
    sizeof(*dirs)
    将以字节为单位返回第一个数组元素的大小,而
    sizeof(dirs)
    将以字节为单位返回所有数组的大小。因此,当您除以这些数字时,就得到了数组中的元素数

    有关
    sizeof
    操作员的详细信息:

    当sizeof操作符应用于引用时,结果与sizeof应用于对象本身的结果相同

    如果未调整大小的数组是结构的最后一个元素,则sizeof运算符返回不带数组的结构的大小

    sizeof运算符通常用于使用以下形式的表达式计算数组中的元素数:

    sizeof array / sizeof array[0]
    

    上述答案的一个重要例外是,如果将dirs传递给函数,
    sizeof(*dirs)
    仍然是数组中一个元素的大小,但是
    sizeof dirs
    现在将计算为环境中指针类型的大小。这是因为数组传递到函数中只是函数中使用的指针。至少在第二页,你最喜欢的C++书中关于< <代码> sieOS/<代码>是什么,以及<<代码> > >如果你坚持用C++来摆放数组,这样做的首选方式通常是:
    template size\t arraylen(t(&)[N]){return N;}
    我最喜欢的一种表达方式是“指针的大小”。甚至不接近它的真正含义。(是的,你应该在谷歌上搜索这个,我给你一个很好的-1。)@JerryCoffin:add a
    constepr
    :P“
    sizeof(*dirs)
    表示数组中单个元素的大小”——更准确地说,是第一个元素的大小。
    sizeof array / sizeof array[0]