C++ 多次打印“once *some number* is *another number*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)

Posted

技术标签:

【中文标题】C++ 多次打印“once *some number* is *another number*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)【英文标题】:C++ prints "once *some number* is *another number* " multiple times while I don't print anything in the code (I need an answer in next half an hour) 【发布时间】:2020-09-23 17:35:33 【问题描述】:

我尝试用随机值填充二维数组:

for(int i = 0; i < size; i++)

    for(int j = 0; j < size; j++)
    
        int temp = rand();
        *(array + i * size + j) = &temp;
    

大小变量在代码的前面设置。数组初始化:

int** array = new int * [5];

for(int i = 0; i < 5; i++)
    array[i] = new int[5];

我不会在后面的代码中做任何事情。请帮忙。

【问题讨论】:

这不是minimal reproducible example。提供的代码无法编译。它缺少头文件、函数体和 main。 (我没有投反对票。) *(array + i * size + j) 这与array[i * size + j] 相同,这使得它更明显是错误的。 = &amp;temp; 不要随意添加&amp; 只是为了让任意代码编译。 我们通过查看代码了解了您的问题,但标题不清楚,您的问题没有提出任何问题。下次尽量清晰一点^^ 【参考方案1】:

啊哈,指点:D

对于数组,您可以使用[] 运算符通过索引访问元素。

这会改变你的:

int temp = rand();
*(array + i * size + j) = &temp;

into(注意两者效果完全一样):

int temp = rand();
array[i * size + j] = &temp;

这样更干净!但也是假的。现在,您正在访问二维数组的元素,即数组。并且将指向 int 的指针分配给数组可能会给您一个错误。

我理解你的想法,但是i * size + j是你想在一个维度中伪造两个维度时使用的,这里不需要^^。您需要访问 i,j 处的元素并直接为其分配 temp,就像使用普通 int 一样。那么如何访问这个元素呢?这样:

int temp = rand();
array[i][j] = temp;

如果出于某种原因您希望保留指针,您也可以通过以下方式访问它:

int temp = rand();
*(*(array + i) + j) = temp;

【讨论】:

以上是关于C++ 多次打印“once *some number* is *another number*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)的主要内容,如果未能解决你的问题,请参考以下文章

C++多态(下)

多次重复打印独特元素

Firestore iOS - 为啥我的阵列多次打印出来?

Boost 无序地图漂亮打印机正在多次打印值以及不需要的值

lodop同一页面一次性打印多次

如何正确显示矢量? [复制]