关于在C中使用指针的函数

时间:2013-04-13 14:47:36

标签: c function pointers

我在C中创建了一个简单的函数,它将参数1指向int,1指向int的双指针和一个整数(第三个参数可能没用,因为它表示存储在第一个空格中的整数的数量论点指出)。它的作用是: 首先,在内存中留出足够的空间来容纳2个整数,并将第二个参数设置为指向该空间。其次,将整数从第一个参数指向的空间复制到第二个参数指向的空间。第三,它将第一个参数指向的空间中的所有整数递增1.我知道这个函数没用,但我想知道我的解决方案出了什么问题。这是代码:

#include <stdlib.h>
#include <stdio.h>
int *x, *y;

void duplicateAndIncreaseByOne(int *arg1, int **arg2, int arg1Elements){
    int ctr;
    *arg2 = (int *) malloc(arg1Elements * sizeof(int));
    for(ctr = 0; ctr < arg1Elements; ctr++){        
        **(arg2 + ctr) = *(arg1 + ctr);
        *(arg1 + ctr) = *(arg1 + ctr) + 1;
    }
}

int main() {
  int j;
  y=(int *)malloc(2*sizeof(int));   
  *y=10; *(y+1)=50;
  duplicateAndIncreaseByOne(y, &x, 2);
  printf("The pointer y contains the elements y[0] = %d and y[1] = %d\n", y[0], y[1]);
  printf("The pointer x contains the elements x[0] = %d and x[1] = %d\n", x[0], x[1]);
}

1 个答案:

答案 0 :(得分:2)

在第

**(arg2 + ctr) = *(arg1 + ctr);

您要将偏移量添加到arg2而不是*arg2。那应该是

*(*arg2 + ctr) = *(arg1 + ctr);

目前,您正在取消引用不存在的int**过去arg2