如何类型转换一个void指针数组指针在c?



** stdlib库中的动态分配函数malloc,calloc,realloc返回空指针

我想把返回的void指针转换为数组指针,可以这样做吗**

void* x=malloc(6*sizeof(int));
int (*ptr)[3];

可以对x进行类型转换并赋值给ptr吗?

您可以通过赋值将x隐式地转换为ptr:

int (*ptr)[3] = x;

或使用显式强制转换:

int (*ptr)[3] = (int (*)[3]) x;

作为x是指向6个int数组的指针,我不知道为什么你想要一个指向前3个的指针。gcc -Wall -Wextra ...甚至不会生成超出限制访问printf("%dn", (*ptr)[4]);的警告,那么为什么要使用普通int *ptr呢?

int *ptr = malloc(6 * sizeof(int));

正常的做法是

int *ptr = malloc(6*sizeof(int));

或者

int *ptr = malloc(3*sizeof(int));

因为你似乎不知道你是想要3个还是6个int

1D array of 6int:

int* arr = malloc(6 * sizeof *arr);
...
arr[i] = something;
...
free(arr);

2x3int:

int (*arr)[3] = malloc( sizeof(int[2][3]) );
...
arr[i][j] = something;
...
free(arr);

在这两种情况下,都不需要void*作为中间步骤。

最新更新