我可以向数组指针添加元素吗

Can I add an element to an array pointer?

本文关键字:元素 添加 指针 可以向 数组 我可以      更新时间:2023-10-16

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

对于普通数组,如果不重新分配,这是不可能的。

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

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

int *p = {1,2,3,4}无论如何都不会编译。但是,如果您将指针realloc添加到int*。下面的代码将执行您想要的操作。

#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("> %in", 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;
}

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

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

然后这样做:

arr[ 4 ] = 5;

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