这是一个非常简单的问题,但我不知道该怎么做。
例如,我有一个名为Array
的数组,其中包含值[1,2,3,4,5,6]
,我想在数组中添加第七个值7
,使其包含[1,2,3,4,5,6,7]
}。
有没有这样做的功能?我是否需要包含任何额外的头文件?任何帮助将不胜感激。
答案 0 :(得分:3)
如果它是一个声明如下的普通数组:
int Array[] = {1,2,3,4,5,6};
然后你就无法为它添加更多值。如果预先提供了一些空间,那么您可以添加更多值:
int Array[7] = {1,2,3,4,5,6};
Array[6] = 7;
如果您使用了c ++,我建议使用std :: vector,但它在C中不存在。
答案 1 :(得分:1)
不。没有关于C中数组的大小或占用元素数量的信息存储。您可以设计一个结构和一个执行此操作的过程,但该语言不适合您。
struct cvector
{
int *content;
int occupied;
int size;
};
void cvector_init(struct cvector *v)
{
v->content = malloc(sizeof *(v->content) * 16;
v->size = 16;
v->occupied = 0;
}
void cvector_kill(struct cvector *v)
{
free(v->content);
}
// returns true if an error occurred, as is the style with linux syscalls.
int cvector_append(struct cvector *v, int value)
{
if (v->occupied == v->size)
{
int new_size = v->size * 1.75;
int *new_content = realloc(v->content, new_size);
if (new_content == NULL) return 1;
v->content = new_content;
v->size = new_size;
}
v->content[v->occupied++] = value;
return 0;
}
答案 2 :(得分:0)
您需要使用<stdlib.h>
中的malloc和realloc函数。基本思路是预先分配一定量的空间,然后在发现它不够大时扩大阵列。
答案 3 :(得分:-1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *append(int size, int a[size], int value){
int *ret = malloc((size+1)*sizeof(int));
memcpy(ret, a, size*sizeof(int));
ret[size] = value;
return ret;
}
int main(void){
int Array[] = {1,2,3,4,5,6};
int size = sizeof(Array)/sizeof(*Array);
int *a = append(size++, Array, 7);
int i;
for(i=0;i<size;i++){
printf("%d\n", a[i]);
}
free(a);
return 0;
}