C 数组指针和函数

C 数组指针和函数,c,arrays,function,pointers,C,Arrays,Function,Pointers,我必须编写一个C程序来执行以下操作: 编写一个包含三个参数的函数:指向第一个参数的指针 数组中范围的元素,指向以下元素的指针 数组中范围的结尾,以及一个int值。有功能 将数组的每个元素设置为int值。 我的代码不起作用。这是我到目前为止所拥有的。感谢您的帮助 #include <stdio.h> #include <iostream> int listNumbers[3]{ 1,2,3 }; void Sorter(int *first, int * last, in

我必须编写一个C程序来执行以下操作:

编写一个包含三个参数的函数:指向第一个参数的指针 数组中范围的元素,指向以下元素的指针 数组中范围的结尾,以及一个int值。有功能 将数组的每个元素设置为int值。 我的代码不起作用。这是我到目前为止所拥有的。感谢您的帮助

#include <stdio.h>
#include <iostream>

int listNumbers[3]{ 1,2,3 };
void Sorter(int *first, int * last, int *value);
int * first = &listNumbers[0];
int * last = &listNumbers[2];
int value;

int main() {

    printf("your list numbers are:\n");
    int i;
    for (int i = 0; i < 3; ++i) {
        printf("%d", listNumbers[i]);
    }
    printf("\n");

    printf("enter an integer:\n");
    scanf_s("%d", &value);

    Sorter( first, last, &value);

    printf("your new list numbers are:\n");
    int j;
    for (int j = 0; j < 3; ++j) {
        printf("%d", listNumbers[j]);
    }
    printf("\n");

    system("PAUSE");
    return 0;
}
void Sorter(int *first, int * last, int *value) {

    int i=0;
    printf("value = %d\n", &value);
    *first = value;

    while (i <= *last) {
        *(first + i) = value;
        i++;
    }
}

首先,找出两个指针之间的差异

int count = last - first + 1;
编译器将自动除以整数的大小。我们添加1以使范围包含在内。现在只需迭代每个元素:

for (int i = 0; i < count; i++) {
    first[i] = value;
}
当你叫它

Sorter(first, last, value);
您的分拣机功能不符合问题标准。参数应该是数组中的两个指针和一个int。您的函数接受三个指针

int count = last - first + 1;
尽管如此,您仍然可以通过使用第三个参数所指向的值作为填充值,使其至少实现练习的表面精神,但您没有这样做。而是将指针本身分配给每个数组元素。这至少应该引起编译器的警告,并且您不应该忽略它的警告,尤其是当您的代码没有做您认为应该做的事情时


此外,最后一个指针应该指向刚刚超过要设置的最后一个元素,但您使用它时,就好像它指向距起始指针的整数偏移量一样。这几乎与前面的问题相反:在这里,您需要使用指针值本身,而不是它所指向的int。

任务是否应该设置由两个指针指定的范围内的每个元素?这似乎比你实际编写的更好,将整个数组中的每个元素都设置好。注意,在C—I保留判断中,全局数组是否被初始化,它是否在C++中有效,它可能是在现代足够的C++中。其他三个全局变量是不必要的。您应该尽可能避免使用全局变量。有时它们是必要的;在这里,它们不是。甚至数组也可以/应该在main中定义和初始化。此外,名称排序器是一个不恰当的设置器或其左右;您没有对数组进行排序,而是将其元素设置为单个值。我想如果你设置整个数组,它会被排序,但是…