C++ sizeof(*p)我的结果是否未定义?

C++ sizeof(*p)我的结果是否未定义?,c++,pointers,sizeof,dereference,C++,Pointers,Sizeof,Dereference,在这段代码中,我取消了对未初始化元素的引用。我的结果没有定义吗 int x[10]; int *p = x; cout << sizeof(p) / sizeof(*p) << endl; intx[10]; int*p=x; 在C++中,“*p”和“p(0))的表达式相同,因此: *p == p[0] 将评估为真。我不知道你所说的“不存在的元素”是什么意思 我不认为你的代码和你想的一样。线路 cout << sizeof(p) / sizeof(*p)

在这段代码中,我取消了对未初始化元素的引用。我的结果没有定义吗

int x[10];
int *p = x;

cout << sizeof(p) / sizeof(*p) << endl;
intx[10];
int*p=x;
在C++中,“*p”和“p(0))的表达式相同,因此:

*p == p[0]
将评估为真。我不知道你所说的“不存在的元素”是什么意思

我不认为你的代码和你想的一样。线路

cout << sizeof(p) / sizeof(*p) << endl;
在C++中,代码“*p”和“p(0))的表达式相同,因此:

*p == p[0]
将评估为真。我不知道你所说的“不存在的元素”是什么意思

我不认为你的代码和你想的一样。线路

cout << sizeof(p) / sizeof(*p) << endl;


“不存在的元素”是什么意思?它就在那里。意思是说*未初始化。您的结果已定义但没有使用您没有取消引用任何内容,因为
sizeof
的操作数表达式未计算。“解引用”是指“计算间接表达式”。
sizeof
在复杂时间工作,而不是在运行时工作。代码相当于
sizeof(int*)/sizeof(int)你说的“不存在的元素”是什么意思?它就在那里。意思是说*未初始化。您的结果已定义但没有使用您没有取消引用任何内容,因为
sizeof
的操作数表达式未计算。“解引用”是指“计算间接表达式”。
sizeof
在复杂时间工作,而不是在运行时工作。代码相当于
sizeof(int*)/sizeof(int)@Slava,不幸但却是真的。@MajorasCoffee,没错。因为
sizeof
是在编译时计算的,所以唯一重要的是对象的类型,而不是它是否有有效值。@MajorasCoffee这很好。问题是你试图将指针的大小除以int的大小。这对你来说几乎没有任何意义。@Slava最初我认为我认为它会导致4/4是正确的,但我想再次检查我的答案,所以我查了一下练习,有人说结果没有定义,所以我不确定。谢谢你的帮助@MajorasCoffee结果是实现定义的
sizeof(指针)
根据您所在的系统而变化。通常在32位系统上为4,在64位系统上为8。也许这就是未定义的意思。@Slava,不幸但却是真的。@MajorasCoffee,没错。因为
sizeof
是在编译时计算的,所以唯一重要的是对象的类型,而不是它是否有有效值。@MajorasCoffee这很好。问题是你试图将指针的大小除以int的大小。这对你来说几乎没有任何意义。@Slava最初我认为我认为它会导致4/4是正确的,但我想再次检查我的答案,所以我查了一下练习,有人说结果没有定义,所以我不确定。谢谢你的帮助@MajorasCoffee结果是实现定义的
sizeof(指针)
根据您所在的系统而变化。通常在32位系统上为4,在64位系统上为8。也许这就是未定义的意思。最初我认为我的想法是正确的,它会导致4/4通过我的书,但我喜欢仔细检查我的答案,所以我查了一下我正在做的练习,有人说结果未定义,所以我不确定。谢谢你的帮助:)最初我认为我的想法是正确的,它会导致我的书中出现4/4,但我喜欢仔细检查我的答案,所以我查了一下我正在做的练习,有人说结果没有定义,所以我不确定。谢谢你的帮助:)
cout << sizeof(x) / sizeof(*x) << endl;
cout << sizeof(x) / sizeof(x[0]) << endl;