问题描述
我只是想反转数组。似乎下面的代码片段有一些问题。 (这里的第一个问题,还不熟悉 c。) 问题: 即使在执行此代码块之后,数组中的值仍然保持不变。
起初,我使用 malloc() 为数组元素分配内存, 后来使用了静态数组。 还将 temp 更改为指针类型, 通过创建另一个临时(例如灯)阻止直接分配,用动态内存初始化它们。 另外,我没有使用取消引用运算符。 但是什么都没有解决。 问题似乎出在这段代码中。但我还没认出来。
我发现适当的代码指示创建新的数组/内存块来收集值并分配它们并打印,但这不是我通常想到的方法。
欢迎所有答案。感谢帮助!
for(i=0;i<num;i++)
{
temp = arr[i];
arr[i] = arr[num-(i+1)];
arr[num-(i+1)] =temp;
}
解决方法
问题是你在 for 循环中使用了错误的条件
PS> '<nope>','<foo>','<bar>','<foobar>','<>' |
ForEach-Object { $_ -match '<(foo)*(bar)*>' }
False
True
True
True # !! '<foobar>' matched too
True # !! '<>' matched too.
例如,如果您有一个包含两个元素的数组
for(i=0;i<num;i++)
^^^^^
然后在循环的第一次迭代后,当 int arr[2] = { 1,2 };
等于 i
时,数组将是
0
但是在循环的第二次迭代之后,数组将再次出现
{ 2,1 }
改为写
{ 1,2 }
还要在使用它们的最小范围内声明变量。例如
for ( i = 0; i < num / 2; i++ )
{
temp = *(arr+i);
*(arr+i) = *(arr+(num-i-1));
*(arr+(num-i-1)) = temp;
}