如何将动态数组连同索引位置一起传递给 C 中的函数?
How to pass a dynamic array to a function in C, along with the index position?
我需要此功能来将动态分配的数组和 idx 传递给函数并为其赋值。当我尝试按照代码中所述分配值 2 时,发生了段错误。这有什么不对?我该如何解决?
#include <stdio.h>
#include <stdlib.h>
void fucn(int *int_ptr, int **arr_ptr)
{
*arr_ptr[*int_ptr] = 1;
(*int_ptr)++;
//*arr_ptr = *arr_ptr + 1;
*arr_ptr[*int_ptr] = 2;
}
int main(int argc, char const *argv[])
{
int *array = calloc(4, sizeof(int));
int i = 0;
fucn(&i, &array);
printf("%d%d", array[0], array[1]);
free(array);
return 0;
}
这里的问题是运算符优先级之一,*arr_ptr[i]
是 而不是 等同于 (*arr_ptr)[i]
,这是您在这里真正想要的,尽管它会是更好的做法是直接将 array
直接传递给您的函数,即使其将指向 int
的指针作为其第二个参数,不需要额外的间接级别。
所以你应该有:
void func(int *int_ptr, int **arr_ptr)
{
(*arr_ptr)[*int_ptr] = 1;
(*int_ptr)++;
(*arr_ptr)[*int_ptr] = 2;
}
或:
void func(int *int_ptr, int *arr_ptr)
{
arr_ptr[*int_ptr] = 1;
(*int_ptr)++;
arr_ptr[*int_ptr] = 2;
}
我需要此功能来将动态分配的数组和 idx 传递给函数并为其赋值。当我尝试按照代码中所述分配值 2 时,发生了段错误。这有什么不对?我该如何解决?
#include <stdio.h>
#include <stdlib.h>
void fucn(int *int_ptr, int **arr_ptr)
{
*arr_ptr[*int_ptr] = 1;
(*int_ptr)++;
//*arr_ptr = *arr_ptr + 1;
*arr_ptr[*int_ptr] = 2;
}
int main(int argc, char const *argv[])
{
int *array = calloc(4, sizeof(int));
int i = 0;
fucn(&i, &array);
printf("%d%d", array[0], array[1]);
free(array);
return 0;
}
这里的问题是运算符优先级之一,*arr_ptr[i]
是 而不是 等同于 (*arr_ptr)[i]
,这是您在这里真正想要的,尽管它会是更好的做法是直接将 array
直接传递给您的函数,即使其将指向 int
的指针作为其第二个参数,不需要额外的间接级别。
所以你应该有:
void func(int *int_ptr, int **arr_ptr)
{
(*arr_ptr)[*int_ptr] = 1;
(*int_ptr)++;
(*arr_ptr)[*int_ptr] = 2;
}
或:
void func(int *int_ptr, int *arr_ptr)
{
arr_ptr[*int_ptr] = 1;
(*int_ptr)++;
arr_ptr[*int_ptr] = 2;
}