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的源代码是否是一个好建议。