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

标签 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
}`

执行此操作的正确方法是什么,以便我对 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/

相关文章:

c - 球类比赛中所有可能得分的路径

将有符号转换为无符号时,C 编译器能否更改位表示?

c - bss 和数据的最大大小

c++ - 检查 char* 缓冲区是否包含 UTF8 字符?

arrays - 如何从不相邻的表列创建多维数组

c++ - 为什么我的char *复印机返回不同的东西?

java - 移除 3s 的输出未达到预期

php - 如何使用 php 创建嵌套 JSon

c++ - 返回指向局部变量的指针总是未定义的行为

c++ - 这个双向链表代码怎么解释呢?