为啥这段代码输出这么多数字? [复制]

Posted

技术标签:

【中文标题】为啥这段代码输出这么多数字? [复制]【英文标题】:Why is this code outputting so many numbers? [duplicate]为什么这段代码输出这么多数字? [复制] 【发布时间】:2019-06-22 18:26:55 【问题描述】:

从两个数组 a 和 b 开始,我试图输出一个矩阵 c,其维度为 sizeof(a) 和 sizeof(b),其条目是 a 和 b 的每对笛卡尔积的乘积。

这些产品也存储在一个二维数组 c 中。

我的代码如下。

#include <iostream>
#include <string>

int main()
   
    int a[]=  1,2,3,4,5,5 ;
    int b[]=  1,23,2,32,42,4 ;
    int c[sizeof(a)][sizeof(b)];

    for (int i = 0; i < sizeof(a); i++) 
        for (int j = 0; j < sizeof(b); j++) 
            c[i][j] =  a[i]* b[j] ;
            std::cout << c[i][j] << " ";
        
        std::cout << "\n";
    

    return 0;

我的输出是:

1 23 2 32 42 4 -858993460 -858993460 1 2 3 4 5 5 -858993460 16710224 15543422 1 2161328 2122464 16710312 15543008 196436084 15536213
2 46 4 64 84 8 -1717986920 -1717986920 2 4 6 8 10 10 -1717986920 33420448 31086844 2 4322656 4244928 33420624 31086016 392872168 31072426
3 69 6 96 126 12 1717986916 1717986916 3 6 9 12 15 15 1717986916 50130672 46630266 3 6483984 6367392 50130936 46629024 589308252 46608639
...

这只是输出的一小部分。

【问题讨论】:

当他们说 sizeof 时,他们真正的意思是数组中的元素数量。 只需打印sizeof(a) 的值,您就会知道发生了什么 @0x499602D2 确定你的意思是说字节,而不是元素,对吧? ARRAYSIZE C++ macro: how does it work?、Is there a standard function in C that would return the length of an array?、Array-size macro that rejects pointers 等可能重复 【参考方案1】:

sizeof(a) 不是数组的长度,它是存储它所需的字节数。

由于数组的元素类型每个都大于一个字节,所以数字不同。

【讨论】:

另外,想要数组的长度考虑 sizeof(a)/sizeof(a[0]) sizeof(…) 也不适用于指向数组的指针! std::size() - en.cppreference.com/w/cpp/iterator/size vs sizeof() - en.cppreference.com/w/cpp/keyword/sizeof

以上是关于为啥这段代码输出这么多数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在汇编输出中有这么多 iostream 样板文件?

为啥这段代码会消耗这么多堆?

为啥这段代码没有在 p5.js 的画布上输出任何东西?

当期望输出 10,000 个数字时,为啥 python 只输出 6 个由 '...' 分隔的数字? [复制]

为啥创建了这么多 Parquet 文件?我们可以不限制 Parquet 输出文件吗?

为啥这段代码没有输出预期的结果?