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