我知道这可能是一个基本问题,但是我从来没有完全掌握过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中的值?
在您的“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)