如何在C中用另一个数组覆盖一个数组
我想知道在C语言中是否可以用另一个数组覆盖一个数组的内容,通过这样做,我如何解决数组大小丢失的问题 假设我有两个数组如何在C中用另一个数组覆盖一个数组,c,arrays,C,Arrays,我想知道在C语言中是否可以用另一个数组覆盖一个数组的内容,通过这样做,我如何解决数组大小丢失的问题 假设我有两个数组 int a[] = {1,2,3,4,6,7,8}; int b[] = {1,6}; // How can I overwrite the array a with array b, so get the following?: a[] = {1,6}; 你不能这样做,就像@Klutt&@david ranieri在评论中说的那样,你可以复制a中b的内容,然后用0填充。
int a[] = {1,2,3,4,6,7,8};
int b[] = {1,6};
// How can I overwrite the array a with array b, so get the following?:
a[] = {1,6};
你不能这样做,就像@Klutt&@david ranieri在评论中说的那样,你可以复制
a
中b
的内容,然后用0填充。但我建议使用动态数组,您可以执行以下操作:
// initialise with braced-init-list
int* a = new double[8] { 1, 2, 3, 4, 5, 6, 7, 8};
int* b = new double[2] { 1, 6};
delete[] a;
a = b;
当您声明一个数组(如[]={…})时,该数组将获得一个无法更改的固定大小,该大小将在编译时确定 如果您想使用动态数组,您需要在堆上进行分配,在C中,这是通过malloc和realloc完成的。realloc允许您调整数组的大小 e、 g 您应该检查realloc的返回值,以了解realloc是否成功
char* q = realloc(p, 5);
if (q != NULL) // successful
ref:您不能更改数组的大小。您必须用零或其他东西填充其余部分。动态数组可以缩小和扩展。创建动态数组,然后通过减小/增大一个数组的大小将其复制到另一个数组。
memcpy(a、b、sizeof(b));memset(a+(sizeof(b)/sizeof(b[0])),0,sizeof(a)-sizeof(b))代码>因为无法在运行时更改数组的大小。你得做点别的。这是不可能的建议,因为“某事”将取决于你试图实现什么。所以,问一个具体的例子,你需要这样做。例如,您可能有一个sentinel值来指示有用数据的结束,或者有一个包含有用数据长度的附加变量。数组大小的损失比增加问题小!;-)可以相互分配指针与指针指向的存储的创建方式无关;-)我不同意,如果创建一个大小为8*sizeof(int)
的数组(堆栈),则无法将其转换为大小为2*sizeof(int)
的数组,但如果使用指针(堆)您只能指向分配区域的开始,这样您就可以告诉内存,现在a
指向b
所指区域的开始,您可以为数组分配指针,无论数组在哪里。
char* q = realloc(p, 5);
if (q != NULL) // successful