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]
相同,这使得它更明显是错误的。 = &temp;
不要随意添加&
只是为了让任意代码编译。
我们通过查看代码了解了您的问题,但标题不清楚,您的问题没有提出任何问题。下次尽量清晰一点^^
【参考方案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*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)的主要内容,如果未能解决你的问题,请参考以下文章