-3

是否可以在不修改数组指针的任何其他内容的情况下添加元素?就像我有int *p = {1, 2, 3, 4};没有一种可能的方法来添加一个数字,比如5它等于{1, 2, 3, 4, 5}

4

3 回答 3

4

使用普通数组,没有重新分配是不可能的。

我建议您使用std::vector,它内部包含连续的内存块,并在您向其中添加元素时自动调整大小。此外,您可以获得指向内部数组的指针并将其传递给期望 C 数组的函数:

std::vector<int> v;
int* pv = &v[0];
于 2013-08-12T13:20:10.660 回答
1

int *p = {1,2,3,4}无论如何都不会编译。但是,您可以将指针添加到int*if中。realloc下面的代码会做你想做的事。

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

#define DEFAULT_SIZE 4

//Print the array...
void print_array(int*, int);

void print_array(int *p, int len) {
    int i;
    for (i = 0; i<len; i++)
       printf("> %i\n", p[i]);
}


int main() {
    int *p = (int*)malloc(sizeof(int) * DEFAULT_SIZE);
    int array[] = {1, 2, 3, 4};
    memcpy(p, array, sizeof(int) * DEFAULT_SIZE);

    printf("Array...\n");
    print_array(array, DEFAULT_SIZE);

    //Realloc and insert 5
    p = realloc(p, sizeof(int)*(DEFAULT_SIZE + 1));
    p[DEFAULT_SIZE] = 5;

    printf("Modified array...\n");
    print_array(p, DEFAULT_SIZE+1);
    return 0;
}
于 2013-08-12T14:16:56.833 回答
0

如果要在 C 中向数组中添加元素,则需要首先定义一个数组,而不是指针(并使其足够大):

int arr[ 5 ] = { 1, 2, 3, 4 };

...然后这样做:

arr[ 4 ] = 5;

备注:指针和数组不可互换。

于 2013-08-12T13:20:04.230 回答