首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >typeof的返回类型是什么?

typeof的返回类型是什么?
EN

Stack Overflow用户
提问于 2010-07-16 22:07:30
回答 5查看 15.8K关注 0票数 5

我希望将元素的类型作为参数提供给指向未知类型元素的指针数组的初始化

就像这样

代码语言:javascript
运行
复制
void* init(type t)
  void* array = malloc(sizeof_type(t)*10));
  return array;
}

然后再调用例如

代码语言:javascript
运行
复制
   init(typeof(int))

但是我不知道typeof的返回类型是什么。

我猜sizeof_type think可以通过以下方式实现

代码语言:javascript
运行
复制
   malloc((type) 0);

提前感谢

PS:如果这是一个向量实现,如果有人能告诉我一些灵活的代码,我也会非常感激的

EN

回答 5

Stack Overflow用户

发布于 2010-07-16 22:14:13

我通常不使用gnu (我认为它只在gnu C中使用),但我不认为它是一个正常意义上的表达式,你可以将它的值赋给一个变量,然后再使用它。我认为它只能在非常特定的上下文中作为一种类型使用。

From the docs:

使用此关键字的语法看起来类似于sizeof,但其构造在语义上的行为类似于使用type定义的类型名称。

typeof-construct可以用在任何可以使用类型定义名称的地方。例如,可以在声明中、强制转换中或在sizeof或typeof.中使用它

票数 3
EN

Stack Overflow用户

发布于 2010-07-16 22:25:32

为什么不能直接使用sizeof呢?类似于:

代码语言:javascript
运行
复制
int c;
void *p = calloc( 10,sizeof(c) );
票数 3
EN

Stack Overflow用户

发布于 2010-07-16 22:17:58

这一点:

代码语言:javascript
运行
复制
#define INIT(t) (malloc(sizeof(t) * 10))

可以像这样使用:

代码语言:javascript
运行
复制
int* a = INIT(int);

或者可能是这样的:

代码语言:javascript
运行
复制
void* b = INIT(typeof(c));

或者甚至是这样:

代码语言:javascript
运行
复制
void* b = INIT(c);

sizeof(c) == sizeof(typeof(c))开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3265676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档