** 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*
作为中间步骤。