一个数组使用C指针将数据复制到另外两个数组
我不熟悉编程和堆栈溢出,所以如果我犯了任何错误,请原谅我。我有一个程序,其中一个int数组被分成两个其他数组,这取决于它们是大于还是小于用户输入的int。现在,所有更小和更大的数组所做的就是复制第一个整数,而不管输入的数字是多少。有什么建议/批评吗一个数组使用C指针将数据复制到另外两个数组,c,arrays,pointers,C,Arrays,Pointers,我不熟悉编程和堆栈溢出,所以如果我犯了任何错误,请原谅我。我有一个程序,其中一个int数组被分成两个其他数组,这取决于它们是大于还是小于用户输入的int。现在,所有更小和更大的数组所做的就是复制第一个整数,而不管输入的数字是多少。有什么建议/批评吗 /* This program will separate an input array into two arrays. One array will be filled by elements greater than a specifi
/*
This program will separate an input array into two arrays. One array will be filled by
elements greater than a specified number and the other array will be filled by elements
less than the specified number.
*/
#include <stdio.h>
void separate(int *a, int n, int value, int *larger, int *size, int *smaller);
int main()
{
//Find size of array
int length;
int *length_pointer = &length;
printf("Enter the length of the array: ");
scanf("%d", length_pointer);
//Enter array elements
int array[length], *p;
printf("Enter %d numbers: ", length);
for(p = array; p < array + length; p++)
scanf("%d", p);
//Find separating value
int value;
printf("Enter the number to split the array: ");
scanf("%d", &value);
//Declare arrays and call function
int n = 0, larger[length], smaller[length];
separate(array, n, value, larger, length_pointer, smaller);
//Display the arrays
printf("%d\n", *smaller);
printf("%d", *larger);
return 0;
}
/*************************************************************************************
separate finds numbers larger than value in array a and stores them in array larger.
Numbers smaller than or equal to value will be stored in the smaller array.
size points to a variable in which the function will store the number of larger
numbers in the array.
*************************************************************************************/
void separate(int *a, int n, int value, int *larger, int *size, int *smaller)
{
// Delete later *smaller = *larger = *a;
for(a = &n; a < n + size; a++)
if(a[n] > value)
{
larger = &a[n];
}
else if(a[n] <= value)
smaller = &a[n];
return;
}
/*
这个程序将把一个输入数组分成两个数组。一个数组将由
大于指定数量的元素,其他数组将由元素填充
小于指定的数字。
*/
#包括
void separate(int*a、int-n、int-value、int*大、int*大、int*小);
int main()
{
//查找数组的大小
整数长度;
int*length_指针=&length;
printf(“输入数组的长度:”);
scanf(“%d”,长度\指针);
//输入数组元素
int数组[长度],*p;
printf(“输入%d个数字:”,长度);
for(p=array;p值)
{
较大=&a[n];
}
否则,如果(a[n]我修改了一点您的代码以达到您的目标。为了从C99下的用户输入中获取数组大小,您需要在程序运行时动态分配它,例如通过calloc(elements\u number,element\u size\u In\u bytes)。不要忘记释放分配的内存以避免内存泄漏。如下所示:
int* array = calloc(user_input, sizeof(int));
...
//some code
...
free(array);
单独的函数看起来有点复杂。这部分是错误的:
for(a = &n; a < n + size; a++)
(a=&n;a
您在这里所做的是使a指向整数na不再指向源数组。因此,当a为时,发出类似a[n]的调用&n类似于(&n)[n]n也不会改变值,因为您增加了指向n的指针,而不是它指向的值
接下来,如果您想显示数组元素,请使用循环,就像我在下面所做的那样
我在单独的函数中找不到n参数的用途。我使用它作为较大数组中的实元素量,因此我不必打印所有元素
我希望这个答案符合你的期望
#include <stdio.h>
#include <stdlib.h>
void separate(int *a, int *larger_count, int value, int *larger, int size, int *smaller);
int main()
{
//Find size of array
int length;
int *length_pointer = &length;
printf("Enter the length of the array: ");
scanf("%d", length_pointer);
//Enter array elements
int*array = calloc(*length_pointer, sizeof(int));
int*p;
printf("Enter %d numbers: ", length);
for(p = array; p < array + length; p++)
scanf("%d", p);
//Find separating value
int value;
printf("Enter the number to split the array: ");
scanf("%d", &value);
//Declare arrays and call function
int *larger = calloc(*length_pointer, sizeof(int));
int *smaller = calloc(*length_pointer, sizeof(int));
int larger_count = 0;
separate(array, &larger_count, value, larger, length, smaller);
for (int i = 0 ; i < larger_count ; ++i)
{
printf("%d ", larger[i]);
}
printf("\n");
for (int i = 0 ; i < length - larger_count; ++i)
{
printf("%d ", smaller[i]);
}
printf("\n");
free(array);
free(larger);
free(smaller);
return 0;
}
/*************************************************************************************
separate finds numbers larger than value in array a and stores them in array larger.
Numbers smaller than or equal to value will be stored in the smaller array.
size points to a variable in which the function will store the number of larger
numbers in the array.
*************************************************************************************/
void separate(int *a, int *larger_count, int value, int *larger, int size, int *smaller)
{
for(int x = 0, y = 0, z = 0; x < size; x++)
{
if (a[x] > value)
{
larger[y] = a[x];
y++;
*larger_count = y;
} else
{
smaller[z] = a[x];
z++;
}
}
}
#包括
#包括
void separate(int*a,int*较大的计数,int值,int*较大,int大小,int*较小);
int main()
{
//查找数组的大小
整数长度;
int*length_指针=&length;
printf(“输入数组的长度:”);
scanf(“%d”,长度\指针);
//输入数组元素
int*array=calloc(*length_指针,sizeof(int));
int*p;
printf(“输入%d个数字:”,长度);
for(p=array;p值)
{
较大的[y]=a[x];
y++;
*较大的_计数=y;
}否则
{
较小的[z]=a[x];
z++;
}
}
}
为了达到您的目标,我对您的代码进行了一些修改。为了从C99下的用户输入中获取数组大小,您需要在程序运行时动态分配它,例如通过calloc(elements\u number,element\u size\u In\u bytes)分配。不要忘记释放分配的内存以避免内存泄漏。如下所示:
int* array = calloc(user_input, sizeof(int));
...
//some code
...
free(array);
单独的函数看起来有点复杂。这部分是错误的:
for(a = &n; a < n + size; a++)
(a=&n;a
您在这里所做的是使a指向整数na不再指向源数组。因此,当a为时,发出类似a[n]的调用&n类似于(&n)[n]n也不会改变值,因为您增加了指向n的指针,而不是它指向的值
下一步,如果你想