我可以向数组指针添加元素吗
Can I add an element to an array pointer?
是否可以添加元素而不修改数组指针的其他内容?就像我有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;
备注:指针和数组不可互换。
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将元素添加到数组的线程安全函数?
- 如何将元素添加到向量的字符串位置
- 将数组的元素添加到链表中
- 如何在C++中将元素添加到非固定大小的数组中?
- 如何使用模板根据类型将元素添加到各种容器中
- 将在堆栈上声明的元素添加到静态数组
- 有什么方法可以将元素添加到列表中,如图所示?
- 继承层次结构并将元素添加到向量
- gStreamer 将元素添加到通过 gst_parse_launch 创建的管道中
- 将新元素添加到列表中,并返回对该元素的引用?
- 将元素添加到 std::list 在多线程中,无需 C++ 互斥锁
- C++如何通过超出大小将元素添加到指针数组中
- 将集合的随机元素添加到列表中,然后将其从原始集合中移除
- 将字符串集合中的元素添加到字符串集合的向量中
- 为什么 memcpy() 是一种将元素添加到 'std::map' 的方法?
- 如何有条件地将元素添加到 std::array - C++11
- 如何在 c++ 中将元素添加到数组的最后一个
- 如何使用<<运算符将元素添加到向量?
- 将元素添加到结构向量的全球向量中