我开始使用C编程,将数组传递给函数时出现问题
出于某种原因,似乎有一半的元素缺失,并被其他一些东西取代。
当我在调用方法之前迭代数组时,
我得到了这个输出:
Votes: 2387
Votes: 2105
Votes: 1230
Votes: 1132
Votes: 2587
Votes: 559
在方法中我得到了这个:
Votes: 2387
Votes: 1230
Votes: 2587
Votes: 1
Votes: 6689632
Votes: 4199349
它似乎是2乘2而不是向迭代器添加1,也许我没有使用指针。
这是代码,也许你可以看到错误:
#include<stdio.h>
#include<stdlib.h>
void method(int *options[], int *numberOfOptions);
main() {
int options[6] = {2387,2105,1230,1132,2587,559};
int size = 6;
int i = 0;
while (i < size) {
printf("Votes: %d \n",options[i]);
i++;
}
method (&options,&size);
}
void method(int *options[], int *numberOfOptions) {
int i = 0;
while (i < *numberOfOptions) {
int optionVotes = options[i];
printf("Votes: %d \n",optionVotes);
i++;
}
}
答案 0 :(得分:1)
编译器会发出有关数组指针传递的警告。您还不必要地将数组大小作为指针传递。
#include<stdio.h>
#include<stdlib.h>
void method(int *options, int numberOfOptions);
main() {
int options[6] = {2387,2105,1230,1132,2587,559};
int size = 6;
int i = 0;
while (i < size) {
printf("Votes: %d \n",options[i]);
i++;
}
method (options,size);
}
void method(int *options, int numberOfOptions) {
int i = 0;
while (i < numberOfOptions) {
int optionVotes = options[i];
printf("Votes: %d \n",optionVotes);
i++;
}
}
答案 1 :(得分:-3)
首先,您的示例代码提供了使用mingw(gcc 4.8.1)编译时所需的输出,因此我不会复制您的问题。
据我所知,有一个明显的问题,就是在这一行
printf("Votes: %d \n",optionVotes);
应该是:
printf("Votes: %d \n",&optionVotes);
因为optionVotes是一个int,所以需要对该int的引用。在main函数中,options [i]被解释为(options + 1),并且因为options本身是一个指针,所以在没有它的情况下按预期工作。