![](/img/trans.png)
[英]Calculating sum of 2 large numbers in C. Dynamically allocated array length changes after array passes through function
[英]I am trying to reverse an array in C. But, the code throws out random 1-2 to some very large numbers digit numbers
正如标题所述,我正在尝试使用 C 制作一个程序,该程序要求用户输入数组创建一个新数组,其中数组中的值已被反转。 例如,输入:10、20、30、40 Output:40、30、20、10 我编写了以下代码来反转 arrays,
#include <stdio.h>
#define MAX_SIZE 100
int main()
{
int sizeArray;
int arr[MAX_SIZE];
int * ptr = arr;
printf("Enter Array size: ");
scanf("%d", &sizeArray);
printf("Enter Array elements:\n");
for (int i = 0; i < sizeArray; i++)
{
scanf("%d", ptr + i);
}
printf("Copying to another array....\n");
int newArr[MAX_SIZE];
int * ptr2 = newArr;
for (int i = 0; i < sizeArray; i++)
{
*(ptr2 + i) = *(ptr + sizeArray - i+1 );
}
printf("Printing new array:\n");
for (int i = 0; i < sizeArray; i++)
{
printf("%d\n", *(ptr2 + i));
}
return 0;
例如:当我输入值时:1、2、3、4 output 为:897546457、1、4、3
请帮我解决我在这里做错的事情。
这些指针会使您的生活复杂化,它们在这里没有用。 并且使用 [] 运算符进行数组访问,它更容易。
#include <stdio.h>
#define MAX_SIZE 100
int main(void)
{
int sizeArray=6;
int arr[MAX_SIZE] = {1, 2, 3, 4, 5, 6};
printf("Copying to another array....\n");
int newArr[MAX_SIZE];
for (int i = 0; i < sizeArray; i++)
{
newArr[i] = arr[sizeArray-i-1];
}
printf("Printing new array:\n");
for (int i = 0; i < sizeArray; i++)
{
printf("%d\n", newArr[i]);
}
return 0;
}
在这份声明中
*(ptr2 + i) = *(ptr + sizeArray - i+1 );
表达式ptr + sizeArray - i+1
指向实际数据集之外,然后i
等于0
或等于1
,因为在这种情况下,您有
ptr + sizeArray - 0 +1
那是一样的
ptr + sizeArray +1
和
ptr + sizeArray - 1 +1
那是一样的
ptr + sizeArray
此外,您没有在此循环之前重置指针ptr2
printf("Printing new array:\n");
for (int i = 0; i < sizeArray; i++)
{
printf("%d\n", *(ptr2 + i));
}
如果您想使用指针以相反的顺序将一个数组复制到另一个数组中,那么代码可以如下所示
#include <stdio.h>
#define MAX_SIZE 100
int main( void )
{
int arr[MAX_SIZE];
int sizeArray;
printf("Enter Array size: ");
if ( scanf("%d", &sizeArray) != 1 )
{
sizeArray = 1;
}
else if ( MAX_SIZE < sizeArray )
{
sizeArray = MAX_SIZE;
}
int *ptr = arr;
printf("Enter Array elements:\n");
for (; ptr < arr + sizeArray; ++ptr )
{
scanf("%d", ptr );
}
printf("Copying to another array....\n");
int newArr[MAX_SIZE];
int * ptr2 = newArr;
while ( ptr != arr )
{
*ptr2++ = *--ptr;
}
printf("Printing new array:\n");
for ( ptr2 = newArr; ptr2 < newArr + sizeArray; ++ptr2 )
{
printf("%d\n", *ptr2);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.