我想使用指针反转数组元素 为什么我的输出为4 3 3 4 当我输入1 2 3 4
这里是我的代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int n, a[100], *ptr;
printf("enter array size: ");
scanf("%d",&n);
printf("enter array element: ");
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
ptr = &a[0];
int j=0;
int i = n-1;
while(j != n)
{
a[j] = *(ptr+i);
j++;
i--;
}
// for printing output
printf("\nin reverse: \n");
for(int k=0; k<n; k++)
{
printf("%d, ",a[k]);
}
return 0;
}
有人可以告诉我这里是什么问题吗?
答案 0 :(得分:2)
while(j != n)
{
a[j] = *(ptr+i);
j++;
i--;
}
这实际上不是交换两个值。设置上半部分很简单。为了交换它们,您需要添加以下行:
while(j != n / 2)
{
int temp = a[j];
a[j] = *(ptr+i);
*(ptr + i) = temp;
j++;
i--;
}
答案 1 :(得分:-1)
在您的代码中,您正在覆盖这些值。
为了通过使用指针来反转数字,请在代码中按如下所示替换while-loop
。
int* ptr_start = a;
int* ptr_end = a + (sizeof(a) / sizeof(a[0])) - 1;
while (ptr_start < ptr_end) {
*ptr_end ^= *ptr_start;
*ptr_start ^= *ptr_end ;
*ptr_end ^= *ptr_start;
ptr_start++;
ptr_end--;
}
注意:对性能会有-ve的影响。