C++; 编写了一个简单程序,了解标准C++库函数 siZeOf() >

C++; 编写了一个简单程序,了解标准C++库函数 siZeOf() > ,c++,std,sizeof,C++,Std,Sizeof,内容如下: const char* array[] = { "1234", "5678" }; std::cout << sizeof(array) << std::endl;//16 std::cout << sizeof (array[0]) << std::endl;//

内容如下:

const char* array[] = {
                          "1234",
                          "5678"
                          };

    std::cout << sizeof(array) << std::endl;//16
    std::cout << sizeof (array[0]) << std::endl;//8

    std::cout << printf("%lu\n",sizeof (char) );//1
    std::cout << printf("%lu\n",sizeof (int) );//24
    std::cout << printf("%lu\n",sizeof (float) );//24
    std::cout << printf("%lu",sizeof (double) );//281
const char*数组[]={
"1234",
"5678"
};
标准::cout

编写了一个简单程序,了解标准C++库siZeFo()的功能。p> <> >强>错误术语。< /强>请阅读(C++标准)和关于

的wikIPaGE。 是编译时运算符,而不是函数。如果
v
是某个变量,
sizeof(v)
只取决于
v
的类型,而不取决于其值(相反,对于大多数函数
f
f(v)
的值取决于
v
的值)

<> P>和理解C++相关的一个好方法是参考有关标准或好网页的文档。 如果有人能解释我

对。读一本关于C++的好书。是由C++的主要设计者编写的。尽量多理解C++的(难点)。您还可以研究现有开源C++编译器的源代码,例如(或有效地使用您的一个)。
sieof(int)< /> >为1(例如对于某些处理器)。在便宜的32位处理器上(例如,今天便宜的手机上的处理器;那么你可能会使用一些)或者在一些(或者可能是一些)上,你可能会有
sizeof(array[0])
或者
sizeof(void*)
即使在2019年也是4位。

让我们来分析一下你看到的有些混乱的输出值的含义吧

首先是
sizeof(array)
sizeof(array[0])
(您的输出方法很好)。您已经将
array
定义为两个
char*
值的数组,每个值都是指针。系统上指针的大小为8字节,因此
数组的总大小为:8*2=16。对于数组[0]:这是一个单指针,因此其大小仅为8字节

到目前为止,所有这些都有意义吗?如果是这样,那么让我们看看代码的第二部分

sizeof(char)
sizeof(int)
sizeof(float)
sizeof(double)
的值在系统上的顺序为,。这些值实际上是输出的!但是,当您同时输出
printf()
的返回值时,这是它已写入的字符数,您将获得为四个调用插入的额外值“2”、“2”、“2”和“1”(顺序混乱,可能未定义)(最后一个没有换行符,因此它只有一个字符;所有其他字符都是一位数+换行符=2个字符)

按如下方式更改代码的第二部分,以获得正确的输出:

printf("%zu\n", sizeof(char));   //1
printf("%zu\n", sizeof(int));    //4
printf("%zu\n", sizeof(float));  //4
printf("%zu\n", sizeof(double)); //8

指针上的
sizeof
返回指针的大小,而不是指针可能指向的大小。
std::cout还请注意类型
size\t
的正确
printf
格式(即
sizeof
返回的内容)“代码< %ZU。为什么你甚至使用<代码> Prtff<代码>?为什么打印“代码> PRINTF < /代码>的返回值?在系统上加倍是281!哇:-)你可以有C++实现,其中代码> siZeof(int)< /C> > 1。我认为一些DSP处理器有这种功能。在上个世纪的一些机器上,有一些C++编译器,你有<代码> siZeof(int)=2 < /Calp> @ BaselestARKYVEVIKY,但不在OP系统上!我的回答是针对他/她的问题,而不是关于C++实现的一般性陈述。这仍然是不正确的。你必须使用
%zu
否则UB会发生我不认为“读一本关于C++的好书”这样的评论与“答案”相关!这样的评论在评论中是可以的-但是如果你发布了答案,那么就把它作为答案,而不是讲座!我没有时间写太多关于
sizeof
的文章,如果我写了,我相信人们会发现我的答案太长。我指的“某人”叫B.Stroustrup。在提到bookI can understand@BasileStrynkevitch提示如何在回答后继续前进,避免一系列后续问题以及如何学习之前,我给出了两个相关的超链接。他仍然为这个问题写了一个高质量的答案。我的答案可能不太像样(但什么是不雅的答案?色情的东西??),但我正在努力使它正确。请记住,我不是以英语为母语的人。我不确定建议一个完全的新手去阅读GCC或LLVM的源代码是否是一个好建议。