gpt4 book ai didi

c++ - 无论是否初始化,使用 sizeof(p[0]) 真的无害吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:37 24 4
gpt4 key购买 nike

我和我的一个 friend 争论,如果我们已经定义了一个数组/指针:

sometype * p;

如果我们想知道类型的大小,他说应该使用:

sizeof(sometype)

我说过也可以使用:

sizeof(p[0]),

应该是一样的。他不同意,他的观点是如果 p 没有初始化,那么 p[0] 的这种用法可能会导致问题。

但据我所知,只有当我们改变或依赖于 p[0] 的值时,这才会有害。由于我们既不更改 p[0] 也不使用 p[0] 的值,因此这是完全明智的。

既然不能互相说服,谁能把这个概念讲清楚。

我知道这个问题没有用,几乎所有开发人员都会使用 sizeof(sometype),包括我 :)。但这个问题很有趣,我真的很想知道 sizeof(p[0]) 是否会有害。

=================================
让我稍微扩展一下这个问题。如果我确实使用了一些不相关的值(或被认为是随机的或其他)。我可以始终使用 p[0] 来获取值吗?

为了使问题更清楚,如果我不更改未初始化指针的值,只使用它指向的值,我是否总是可以得到一个值而不会引起问题?

最佳答案

sizeof 的参数是一个未计算的操作数,因此指针取消引用等不必引用有效内存。它完全基于类型信息。

(作为推论,sizeof *p 不是多态的,它只使用静态类型。)

关于c++ - 无论是否初始化,使用 sizeof(p[0]) 真的无害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com