数组指针和函数

时间:2017-02-24 20:33:20

标签: c arrays function pointers

我必须编写一个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++;
    }
}

2 个答案:

答案 0 :(得分:1)

首先,弄清楚两个指针之间的差异。

int count = last - first + 1;

编译器将自动除以整数的大小。我们添加1以使范围包含在内。现在只需遍历每个元素:

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

另外,为什么要将值作为指针传递?这应该只是一个价值。

void Sorter(int *first, int *last, int value) {

当你打电话给它时......

Sorter(first, last, value);

答案 1 :(得分:1)

您的Sorter功能不符合问题标准。参数应该是指向数组的两个指针,以及 int 。你的函数接受三个指针。

然而,你可以通过使用第三个参数指向的值作为填充值,至少实现了练习的明显精神,但是你不这样做。而是将指针本身分配给每个数组元素。 至少应该从你的编译器中引出一个警告,你不应该忽略它的警告,特别是当你的代码没有按你认为的那样做时。

此外,last指针应指向刚刚设置的最后一个元素,但是你使用它就好像它指向一个偏离开始指针的整数。这几乎与前一个问题相反:在这里,您需要使用指针值本身,而不是它指向的int