C:向数组添加元素

时间:2016-02-08 21:08:24

标签: c arrays

我正在尝试测试一个程序,该程序创建一个包含0个元素的数组,然后向其中添加元素(每次重新分配内存),然后打印出元素。但是,当我尝试运行它时,我一直都会遇到错误。

int main(int argc, const char * argv[]) {
    int num = 0;
    int n = 10;
    int **array = malloc(0);
    for (int i = 0; i < n; ++i)
    {
        ++num;
        array = realloc(array, num * sizeof(int*));
        array[num-1] = &i; 

    }
    for (int j = 0; j < n; ++j)
    {
        printf("%d", &array[j]); // error 1
    }
    return 0;
}

对不起,我没有在原帖中包含错误。我想我修好了其中一个。这是另一个:

错误1:Format指定类型'int'但参数的类型为'int *'

2 个答案:

答案 0 :(得分:1)

这个答案基于您打印一个简单数组的假设,因为您没有显示您期望的输出。你使用的是间接的一个步骤而不是你需要的,以及太多的变量。请注意,索引与长度不同(通常为1)。

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

int main(void) {
    int i, n = 10;
    int *array = NULL;                  // no need for double star, or fake allocation
    for (i = 0; i < n; ++i)
    {
        array = realloc(array, (i + 1) * sizeof(int));  // remove the *, add 1 for num elements
        array[i] = i;
    }
    for (i = 0; i < n; ++i)
    {
        printf("%d", array[i]);                 // remove the &
    }

    free(array);                                // don't forget this
    return 0;
}

节目输出:

0123456789

实际上,您应该将realloc的结果分配给另一个指针变量,检查它是否正常,然后替换原始指针var。

答案 1 :(得分:0)

printf("%d", &array[j]); // error 1

&amp;是地址运算符。所以它正在制作一个指针。你的数组已经是一个指向整数的指针数组。

使用&amp;您正在尝试打印整数指针本身的地址。

尝试使用*而不是&amp ;. *表示您要打印整数指针的值。

printf("%d", *array[j]); // error 1