给定一个 typedef 的 ptr 类型,我如何访问基类型?
例如考虑 double 的“数组”:
typedef double* vec_t;
如果我尝试这样初始化:
void init_vec(int n, vec_t v){
v = (vec_t)malloc(n*sizeof(*vec_t));
//...
}
gcc 不完全是这样
error: expected expression before ‘vec_t’
v = (vec_t)malloc(n*sizeof(*vec_t));
^
执行此操作的正确方法是什么?
当然,我可以简单地编写 v = (vec_t)malloc(n*sizeof(double));
,但这不是我想要的。
最佳答案
首先,不要在 C 中转换 malloc()
的结果。它返回一个 void 指针,该指针将被安全地提升为 vec_t *
。
其次,*vec_t
试图取消引用一个类型,这在语义上是无效的。您需要取消引用 vec_t
类型的变量。方便的是,您有一个。
v = malloc(n * sizeof *v);
编辑:正如@chqrlie 所指出的,malloc()
的内存在返回时会立即丢失。分配的地址分配给 v
,但调用函数的 v
副本未被覆盖。
关于c - malloc typedef 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854202/