使用 malloc 时类型转换指针数组
Type casting an array of pointers when using malloc
当我是运行下面的程序时,它执行得很好:
int *a, i=3;
int **arr;
a = &i;
arr = malloc(sizeof(int*));
arr[0] = a;
但是,malloc returns 是一个 void* 指针,因此对其进行类型转换会更漂亮。我试过 (int*)malloc(sizeof(int*))
但我收到警告:
assignment from incompatible pointer type
指向类型转换行(特别是等号处)。
具体情况的正确类型是什么?提前致谢!
类型应该与您分配给的指针相同。由于您要分配给 int **arr
,因此您应该转换为 int **
.
arr = (int **)malloc(sizeof(int*));
但是,一般不建议将malloc()
的结果用C进行强制转换,原因见Do I cast the result of malloc?
一般来说,如果您正在分配一个 T
类型的对象,那么 malloc 调用的返回指针应该被转换为 T *
.
类型
例如
T *p = ( T * )malloc( sizeof( T ) );
也就是你要获取一个指向T
类型对象的指针,所以获取到的指针的类型就是T *
.
例如,如果对象的类型为 int *
,则相应的指针将具有类型 int **
。
在 C 中,可以将指向 void 类型的指针分配给任何其他对象类型的指针,而无需强制转换。有时 C 中的转换用于自我记录或避免某些类型的错误。
您应该使用 int**
,而不是 int*
,因为 arr
的类型是 int**
。
请注意,更好的分配模式是:
arr = malloc(sizeof *arr);
它对 arr
类型的变化是健壮的。此外,它是紧凑的并且避免了重复。它会自动检测 arr
是否更改为数组或非 ponter。分配的大小也会自动调整。
malloc
的主要问题不是 return 类型,而是确保分配了正确的字节数。
当我是运行下面的程序时,它执行得很好:
int *a, i=3;
int **arr;
a = &i;
arr = malloc(sizeof(int*));
arr[0] = a;
但是,malloc returns 是一个 void* 指针,因此对其进行类型转换会更漂亮。我试过 (int*)malloc(sizeof(int*))
但我收到警告:
assignment from incompatible pointer type
指向类型转换行(特别是等号处)。 具体情况的正确类型是什么?提前致谢!
类型应该与您分配给的指针相同。由于您要分配给 int **arr
,因此您应该转换为 int **
.
arr = (int **)malloc(sizeof(int*));
但是,一般不建议将malloc()
的结果用C进行强制转换,原因见Do I cast the result of malloc?
一般来说,如果您正在分配一个 T
类型的对象,那么 malloc 调用的返回指针应该被转换为 T *
.
例如
T *p = ( T * )malloc( sizeof( T ) );
也就是你要获取一个指向T
类型对象的指针,所以获取到的指针的类型就是T *
.
例如,如果对象的类型为 int *
,则相应的指针将具有类型 int **
。
在 C 中,可以将指向 void 类型的指针分配给任何其他对象类型的指针,而无需强制转换。有时 C 中的转换用于自我记录或避免某些类型的错误。
您应该使用 int**
,而不是 int*
,因为 arr
的类型是 int**
。
请注意,更好的分配模式是:
arr = malloc(sizeof *arr);
它对 arr
类型的变化是健壮的。此外,它是紧凑的并且避免了重复。它会自动检测 arr
是否更改为数组或非 ponter。分配的大小也会自动调整。
malloc
的主要问题不是 return 类型,而是确保分配了正确的字节数。