我可以在数组指针中添加一个元素吗?

时间:2013-08-12 13:18:16

标签: c++ c arrays pointers

是否可以在不修改数组指针的情况下添加元素?就像我int *p = {1, 2, 3, 4};有可能添加一个数字,例如5所以它等于{1, 2, 3, 4, 5}

3 个答案:

答案 0 :(得分:4)

使用普通数组时,如果没有重新分配,则无法实现。

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

std::vector<int> v;
int* pv = &v[0];

答案 1 :(得分:1)

int *p = {1,2,3,4}无论如何都不会编译。但是,如果指针int*,则可以添加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;
}

答案 2 :(得分:0)

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

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

...然后执行此操作:

arr[ 4 ] = 5;

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