Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个数组使用C指针将数据复制到另外两个数组_C_Arrays_Pointers - Fatal编程技术网

一个数组使用C指针将数据复制到另外两个数组

一个数组使用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

我不熟悉编程和堆栈溢出,所以如果我犯了任何错误,请原谅我。我有一个程序,其中一个int数组被分成两个其他数组,这取决于它们是大于还是小于用户输入的int。现在,所有更小和更大的数组所做的就是复制第一个整数,而不管输入的数字是多少。有什么建议/批评吗

/*
  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的指针,而不是它指向的值

下一步,如果你想