我是否正确传递了这些变量? C编程

时间:2014-04-09 02:06:35

标签: c variables pointers

我是C的超级初学者,我想知道这些变量是否正确传递,我希望他们的值可以在main中改变。我主要想知道我是否正在使用&和*正确。

#include <stdio.h>

int assign(int *i, int *scores[]);

int main(void){
    int scores[30], i;

    assign(&i, &scores[0]);

    return 0;
}

int assign(int *i, int *scores[]){
    printf("Input scores:\n");
    for (i = 0; i < 30; i++){
        scanf("%d", *scores[*i]);
    }

}

5 个答案:

答案 0 :(得分:3)

你传递的间接层次太多了:

#include <stdio.h>

void assign(int *scores);

int main() {
    int scores[30];
    assign(scores);
    return 0;
}

void assign(int *scores) {
    int i;
    printf("Input scores:\n");
    for (i = 0; i < 30; i++) {
        scanf("%d", &scores[i]);
    }
}

答案 1 :(得分:1)

&amp;得分的类型为char[30]*。分配需要char**。为什么还要添加额外的间接? 使用:

int assign(int *i, int scores[static 30]);

致电:

assign(&i, scores);

理由:
C总是按值传递,因此使用指针是正确的 但是C不能复制数组,而是几乎每次使用它们都会衰减到指向第一个元素的指针 此外,如果原型似乎期望一个数组,它实际上需要一个指针 添加的static 30是编译器的保证(并且是读者/程序员的标记,使用上述指针可以访问至少30个元素。

另外,不要忘记适当地减少参考次数。目前你没有。

答案 2 :(得分:1)

您可以使用*&来简化代码。此外,您可以直接将数组作为指针传递。无需&scores[0]

#include <stdio.h>



int assign(int i, int* scores){
    printf("Input scores:\n");
    for (i = 0; i < 30; i++){
        scanf("%d", &scores[i]);
    }

}

int main(void){
    int scores[30], i;
    assign(i, scores);

    return 0;
}

答案 3 :(得分:1)

#include <stdio.h>

int assign(int *i, int scores[]);

int main(void){
    int scores[30], i, j;

    assign(&i, scores);
    for(j=0;j<i;++j)
        printf("%d %d\n", j, scores[j]);
    return 0;
}

int assign(int *outSize, int scores[]){
    int i = 0;
    printf("Input scores:\n");
    for (i = 0; i < 30; ++i){
        if(1!=scanf("%d", &scores[i]))
            break;
    }
    return *outSize = i;
}

答案 4 :(得分:0)

您也应该将数组的大小传递给函数。 C类型数组不知道它的大小。我们应该尽可能避免使用魔法/硬编码值。

//main function
int scores[30], i;
int size = sizeof(scores)/sizeof(scores[0]);

// pass the size information as well
int assign(int *i, int *scores[]), int size) {

}