为什么我会得到预期的标识符或'('?

时间:2013-08-24 00:52:22

标签: c arrays int

我正在学习C并尝试编写一个非常简单的程序。这是我的代码:

#include <stdio.h>

int[] getNumbers( int x, int y, int z );

int main() {
    int[] theNumbers = getNumbers(5,6,7);
    return 0;
}

int[] getNumbers( int x, int y, int z) {
    int[] numbers = { x, y, z };
    return numbers;
}

我无法弄清楚我的问题是什么。

3 个答案:

答案 0 :(得分:2)

这是您在C中声明数组的方式:

int a[SIZE];

[您发布的示例是C#java声明数组的方式]

另外,正如其他人所说,您发布的代码有几个问题:

  • 您无法在C中返回数组(仅指向数组或结构的指针)
  • 您不应该返回对局部变量的引用(改为使用malloc())

答案 1 :(得分:1)

这是一个在C中工作的示例方法。可能有更好的方法,但目前还不清楚实际目标是什么。这只是说明了一些处理你想要做的事情的方法,但是在工作中C. C语言比Java语言更加严格和明确。 Java恰好采用了C / C ++中的一些语法。

#include <stdio.h>

typedef struct { int a[3]; } int_array;

int_array getNumbers( int x, int y, int z );

int main() {
    int_array theNumbers = getNumbers(5,6,7);
    printf( "%d, %d, %d\n", theNumbers.a[0], theNumbers.a[1], theNumbers.a[2] );
    return 0;
}

int_array getNumbers( int x, int y, int z) {
    int_array numbers = { x, y, z };
    return numbers;
}

答案 2 :(得分:1)

在C中我们不能返回一个数组,但是我们可以返回一个数组指针。

#include <stdio.h>
#include <stdlib.h>

int* getNumbers(int x, int y, int z)
{
    int *num_arr     = malloc(3 * sizeof(int));
    *(num_arr)       = x;
    *(num_arr + 1)   = y;
    *(num_arr + 2)   = z;

    return num_arr;
}

int main(int argc, char **argv)
{
    int *a;
    a = getNumbers(5, 6, 7);

    // printf("%d %d %d\n", a[0], a[1], a[2]);

    return 0;
}