我必须编写一个C程序来执行以下操作:
我的代码无效。这是我到目前为止所拥有的。任何帮助表示赞赏。
#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++;
}
}
答案 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
。