C - 将数组传递给方法

时间:2014-10-15 23:12:04

标签: c pointers

你好吗?

我开始使用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++;        
        }


    }

2 个答案:

答案 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本身是一个指针,所以在没有它的情况下按预期工作。