使用数组和放大器完成的基本方形功能的malloc

时间:2018-03-16 01:58:21

标签: c

        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

基本上取一个整数并返回其正方形的整数数组。 (以上作品)

如果没有malloc或指针,我该怎么做?

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

int *squares(int max_val) {
    int *result = malloc(max_val * sizeof(int));
    int i;
    for(i = 1; i <= max_val; i++) {
        result[i-1] = i*i;
    }
    return(result);
}

int main() {
    int *sq = squares(10);

    int i;
    for(i = 0; i < 10; i++) {
        printf("%d\t", sq[i]);
    }
    printf("\n");

    return(0);
}

由于函数调用而导致错误。这可能吗?或者我们必须用指针做到这一点?

2 个答案:

答案 0 :(得分:0)

int[] squares(int max_val) {
    int result[max_val];
    int i;
    for(i = 1; i <= max_val; i++) {
        result[i-1] = i*i;
    }
    return(result);
}

无效C:

a.c:3:4: error: expected identifier or ‘(’ before ‘[’ token
 int[] squares(int max_val)

应该是

int *squares(int max_val) {
    ...
}

将它放在一边,你的第二个squares返回一个指向本地数组的指针。 一旦squares结束它的执行,这个数组就不再存在,所以你是 返回一个指针,它返回时会变为无效。

另外

int sq[] = squares(10);

也是无效的C

a.c:9:13: error: invalid initializer
  int sq[] = squares(10);
             ^~~~~~~

您无法为数组指定函数值。正确的 版本是

int *sq = squares(10);

因此,如果您不希望squares为结果分配带malloc的内存,那么您可以 要么在main中分配内存,要么在main中创建一个数组并将其传递给 squares

int squares(int *result, int max_val) {
    if(result == NULL || max_val <= 0)
        return 0;

    int i;
    for(i = 1; i <= max_val; i++) {
        result[i-1] = i*i;
    }

    return 1;
}

// version 1
int main() {
    int *sq = malloc(10 * sizeof *sq);

    // NEVER forget to check the return value of malloc
    if(sq == NULL)
    {
        fprintf(stderr, "not enough memory\n");
        return 1;
    }

    squares(sq, 10);

    int i;
    for(i = 0; i < 10; i++) {
        printf("%d\t", sq[i]);
    }
    printf("\n");

    free(sq); // NEVER forget to free

    return 0;
}

// version 2
int main() {
    int sq[10];

    squares(sq, sizeof sq / sizeof sq[0]);

    int i;
    for(i = 0; i < 10; i++) {
        printf("%d\t", sq[i]);
    }
    printf("\n");

    return 0;
}

答案 1 :(得分:0)

这样的事情怎么样??

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

void squares(int values[], int max_val) {
    for(int i = 1; i <= max_val; i++) {
        values[i - 1] = i * i;
    }
}

int main() {
    int sq[10];
    squares(sq, 10);

    int i;
    for(i = 0; i < 10; i++) {
        printf("%d\t", sq[i]);
    }
    printf("\n");

    return(0);
}