我知道这可能是一个基本问题,但我从未完全掌握 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
}`
执行此操作的正确方法是什么,以便我对 b 所做的任何更改都不会影响 a 中的值?
最佳答案
在您的“p”方法中,您将指针 b 指定为指针 a,或者换句话说,您使 b 指向 a 指向的对象。对 b 的任何更改都会导致对 a 的更改,因为它们最终都指向同一 block 内存。
使用 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;
}
关于c指针和数组,将内容复制到另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976316/