gpt4 book ai didi

c - 使用指向现有数组的指针初始化数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:22 25 4
gpt4 key购买 nike

我已经明白不能在 c 中将数组分配给数组。像这样的声明:

int array1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int array2[10];
int * array3 = array;

有效,但是一个连续的语句:

array2 = array1;

不是,因为数组确实会退化为指针。我发现这并不令人满意,因为万一我有一个创建数组的函数:

int * arrcreate()  {
static int funcarray[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
return funcarray
}

我在我的主例程中调用它,我想处理一个数组,而不是一个指针。当然,我可以在我的主程序中创建一个数组并手动填充它:

int main() {
int array[10];
int i;
int * p = arrcreate();
for(i = 0; i<10, i++) {
array[i] = p[i];
}
}

但是因为我知道在初始化数组时可以进行某种赋值:

int array1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

我想问一下是否可以将指向数组的指针也分配给一个数组。

一个等价的问题是:给定一个指向数组的指针,并且知道指针所指向的数组的大小,是否有可能动态地创建和初始化一个新数组,它在每个旧的副本有关系吗?

最佳答案

正如 Bathsheba 所说,数组不能像您在问题中提出的那样位于作业的左侧。但是,如果您始终知道指向要复制的数组的指针以及数组大小,则可以按照以下行编写一个函数:

void copy_array(const int *a, const int arraySize, int **b) {
*b = malloc(arraySize * sizeof(*a));
for (int indx = 0; indx < arraySize; indx++) {
(*b)[indx] = a[indx];
}
}

int main() {
int array1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *array2;
copy_array(array1, &array2);
// do stuff
free(array2);
}

这是一个选择吗?

关于c - 使用指向现有数组的指针初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50813850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com