c指针和数组,将内容复制到另一个数组中

cHa*_*Ham 5 c arrays pointers

我知道这可能是一个基本问题,但是我从来没有完全掌握过C中的整个指针概念。

我的问题是,说我有一个int数组,并将其传递给类似`

int main(){
    int *a = malloc(sizeof(int*)*4);

    // add values to a
    p(a);
}

void p(int *a){
   int *b = malloc(sizeof(int*)*4)
   b = a;
   // change values in b

   //print a b
}`
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法才能使我对b所做的任何更改都不会影响a中的值?

Bra*_*ton 5

在您的“p”方法中,您将指针 b 分配为指针 a,或者换句话说,您让 b 指向 a 指向的内容。对 b 的任何更改都会导致对 a 的更改,因为它们最终都指向同一个内存块。

使用 memcpy 复制内存块。它看起来像这样:

#include <string.h>
#include <stdlib.h>
void p(int *a){
   int *b = (int*)malloc(sizeof(int)*4);
   memcpy(b, a, sizeof(int)*4);

    //make changes to b.
   b[0] = 6;
   b[1] = 7;
   b[2] = 8;
   b[3] = 9;
}

int main(int argc, char **argv)
{
    int *a = (int*)malloc(sizeof(int)*4);

    // add values to a
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
    a[3] = 4;

    p(a);

return 0;
}
Run Code Online (Sandbox Code Playgroud)