【发布时间】:2012-12-12 03:34:24
【问题描述】:
我在和我的一个朋友争论,如果我们定义了一个数组/指针:
sometype * p;
如果我们想知道类型的大小,他说应该使用:
sizeof(sometype)
我说也可以使用:
sizeof(p[0]),
应该是一样的。他不同意,他的观点是如果p没有初始化,那么p[0]的这种用法可能会导致问题。
但据我所知,只有当我们改变或依赖p[0] 的值时,这才会有害。由于我们不更改p[0] 也不使用p[0] 的值,这是完全明智的。
既然不能互相说服,谁能把这个概念说清楚。
我知道这个问题没有用,几乎所有的开发者都会使用 sizeof(sometype),包括我:)。但是这个问题很有趣,我真的很想知道 sizeof(p[0]) 是否会有害。
==================================
让我稍微扩展一下这个问题。如果我确实使用了一些不相关的值(或被认为是随机的或其他的)。我可以始终使用p[0] 来获取值吗?
为了让问题更清楚,如果我不更改未初始化指针的值,只使用它所指向的值,我是否可以始终获得一个值而不会造成问题?
【问题讨论】:
-
无耻?真可惜。我爱火腿!
-
sizeof p[0](或sizeof *p)实际上更安全,因为您可能会更改p的类型但忘记更改sizeof语句。 -
大声笑,我真的说无赖吗?如果我这样做了,那么对错字感到抱歉。有趣的问题,有趣的拼写错误。
-
@NikosC 当我建议使用
malloc(sizeof *p)而不是malloc(sizeof T)...