c - malloc typedef 指针

标签 c arrays pointers malloc

给定一个 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/

相关文章:

c++ - 如何计算16bit到8bit的量化误差?

c - Go 语言使用 C 的内部结构

javascript - 在 javascript 中使用链表

arrays - 如何使用 OmniThreadLibrary 中的 SetParameter 将数组作为参数传递给任务?

c - 如何保证数组内指针比较的有效性?

java - 在计算圈复杂度时,退出当前方法/函数的语句应该是它的一部分吗?

c - 为什么 fopen/fprintf 没有竞争条件

c-尝试添加到 Struct 中的 char 数组时出现段错误

c - 如何在 C 中以可移植的方式管理内存对齐和通用指针算术?

GCC 不同部分中的常量指针