如何在C中设置从数组A指向数组B的指针

如何在C中设置从数组A指向数组B的指针,c,arrays,pointers,C,Arrays,Pointers,我试图交换C中的两个数组,从数组B指向数组A,然后释放A,这样我只剩下数组B和数组A的内容。这可能吗 代码: 提前谢谢大家, Wouter您可以使用循环: for (size_t i = 0; i < 4; i++) b[i] = a[i]; (大小i=0;i

我试图交换C中的两个数组,从数组B指向数组A,然后释放A,这样我只剩下数组B和数组A的内容。这可能吗

代码:

提前谢谢大家,

Wouter

您可以使用循环:

for (size_t i = 0; i < 4; i++)
    b[i] = a[i];
(大小i=0;i<4;i++)的

b[i]=a[i];
注意:始终检查
malloc()
的返回值是否存在故障。

您可以使用循环:

for (size_t i = 0; i < 4; i++)
    b[i] = a[i];
#include <string.h>

#define ARRAY_LENGTH 4

// insert your code above here.. and as the other answer says you should
// always check malloc's return value to make sure it succeeded before
// continuing or you will seg fault. If it fails, you should gracefully
// handle the error

memcpy(b, a, sizeof(int) * ARRAY_LENGTH);  // copies sizeof(int)*ARRAY_LENGTH bytes
                                           // from the memory space pointed to by a
                                           // to the memory space pointed to by b
free(a);  // returns the memory pointed to by a to the heap
(大小i=0;i<4;i++)的

b[i]=a[i];
注意:始终检查
malloc()
的返回值是否存在故障

#include <string.h>

#define ARRAY_LENGTH 4

// insert your code above here.. and as the other answer says you should
// always check malloc's return value to make sure it succeeded before
// continuing or you will seg fault. If it fails, you should gracefully
// handle the error

memcpy(b, a, sizeof(int) * ARRAY_LENGTH);  // copies sizeof(int)*ARRAY_LENGTH bytes
                                           // from the memory space pointed to by a
                                           // to the memory space pointed to by b
free(a);  // returns the memory pointed to by a to the heap
我会相信你的话,你有很好的理由复制
a
数组,因为这在你的代码中并不明显

最后,这是一个骗局,我们都不应该回答:)

我会相信你的话,你有很好的理由复制
a
数组,因为这在你的代码中并不明显

最后,这是一个骗局,我们都不应该回答:)

如果使用malloc()在堆上创建一个数组,则会得到一个指针,该指针与任何其他变量类似,因为它可以被赋值或复制。但是,只有一个内存缓冲区

所以

表示a和b都指向同一内存区域。这就是所谓的指针别名,如果你不能严格控制你正在做的事情,它会导致深层次的问题。通常,如果a指向缓冲区,我们应该使用a来标识它。复印件对我们没用

如果我们有,就像你的例子一样

 int *a = malloc(n * sizeof(int));
 int *b = malloc(n * sizeof(int));
我们有两个缓冲区。因此,分配b=a将使b指向a的缓冲区,并孤立b指向的缓冲区。再说一次,这不是我们想要的

然而,如果我们这样做

int *a = malloc(n * sizeof(int));
int *b = malloc(n * sizeof(int));
int * temp'

temp = a;
a = b;
b = temp
我们交换了a和b。b现在指向先前指向的缓冲区a,a现在指向先前指向的缓冲区b


那很好。有时这样做是明智的。

如果使用malloc()在堆上创建一个数组,则会得到一个指针,它与任何其他变量类似,可以赋值或复制。但是,只有一个内存缓冲区

所以

表示a和b都指向同一内存区域。这就是所谓的指针别名,如果你不能严格控制你正在做的事情,它会导致深层次的问题。通常,如果a指向缓冲区,我们应该使用a来标识它。复印件对我们没用

如果我们有,就像你的例子一样

 int *a = malloc(n * sizeof(int));
 int *b = malloc(n * sizeof(int));
我们有两个缓冲区。因此,分配b=a将使b指向a的缓冲区,并孤立b指向的缓冲区。再说一次,这不是我们想要的

然而,如果我们这样做

int *a = malloc(n * sizeof(int));
int *b = malloc(n * sizeof(int));
int * temp'

temp = a;
a = b;
b = temp
我们交换了a和b。b现在指向先前指向的缓冲区a,a现在指向先前指向的缓冲区b


那很好。有时候这样做是明智的。

推荐
int*a=malloc(4*sizeof(*a))-虽然两个版本都是正确的,但以这种方式编写意味着您不太可能犯错误。我不确定您想做什么。您需要复制内容还是只复制指针?建议
int*a=malloc(4*sizeof(*a))-虽然两个版本都是正确的,但以这种方式编写意味着您不太可能犯错误。我不确定您想做什么。你需要复制内容吗,还是只是复制指针?你能在你的答案中添加更多的细节吗?也许有一两句解释:)@AndreasGrapentin完成了!你能在回答中再补充一些细节吗?也许有一两句解释:)@AndreasGrapentin完成了!