【发布时间】:2022-01-03 16:50:06
【问题描述】:
我用 C 编程语言实现了一个程序来反转整数数组(作为练习)
#include <stdio.h>
#define procedure void
procedure reverse_arr(int A[], size_t N)
{
for(int i = 0; i < N / 2; i++){
A[i] = A[i] ^ A[N-1-i];
A[N-1-i] = A[N-1-i] ^ A[i];
A[i] = A[i] ^ A[N-1-i];
}
}
procedure print_array(int A[], size_t N)
{
for(int i = 0; i < N; i++)
printf("%d\n", A[i]);
}
int main()
{
int A[5] = {1, 2, 3, 4 ,5};
print_array(A, sizeof(A));
reverse_arr(A, sizeof(A));
print_array(A, sizeof(A));
}
我已经对其进行了测试,它给了我以下结果:
1 2 3 4 5 0 -13168 0 -13088 0 -2147180803 1 -2139062144 -2139062144 -2147180911 1 -13168 0 6 0 0 6 0 -13168 1 -2147180911 -2139062144 -2139062144 1 -2147180803 0 -13088 0 -13168 0 5 4 3 2 1
如您所见,一开始它打印原始数组,最后打印反向数组,但为什么它打印中间的垃圾?数组大小似乎没有问题,据我所知,在将其作为函数参数传递时,在编译时不需要知道一维数组的大小。
我正在使用 minGW GCC 在 windows x64 上编译。
【问题讨论】:
-
sizeof(A) / sizeof(int)
-
感谢 Hans Passant,这是打印垃圾的原因,我重新编译了程序,现在可以正常工作了。回答 Lundins 的问题,使用 xor 算法是我们评估策展人的一个条件。
-
#define void是最愚蠢的事情。您正在更改关键字的含义。 -
#define procedure voidC 不是帕斯卡。不要让它看起来像帕斯卡。
标签: arrays c for-loop sizeof function-definition