是否可以在不修改数组指针的情况下添加元素?就像我int *p = {1, 2, 3, 4};
有可能添加一个数字,例如5
所以它等于{1, 2, 3, 4, 5}
?
答案 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;
备注:指针和数组不可互换。