C++ 这段代码在技术上有效吗? int*b=arr,*e=arr+sz;//sz有一种尺寸 while(b我没有找到问题的答案。这部分我很困惑。非常感谢。也欢迎提供相关链接:-)

C++ 这段代码在技术上有效吗? int*b=arr,*e=arr+sz;//sz有一种尺寸 while(b我没有找到问题的答案。这部分我很困惑。非常感谢。也欢迎提供相关链接:-),c++,arrays,pointers,size,size-t,C++,Arrays,Pointers,Size,Size T,int这里是类型指针指向的,它在这里完全不相关。指针的大小是固定的,不取决于指针的类型,并且该大小至少是size\u t(通常是相同的),因此没有危险。您似乎将int与int*混淆了。将size\u t添加到int*是这些类型的正确用法。(值可能不正确,但类型是兼容的,通常大小相同)。此代码非常糟糕。把这本书扔出气闸。谢谢你的努力!我已经得到了:-)VioletGiraffe Yeah,我明白了,C++中的约定应该是(AutoITER = V.Read),ITER!= v Enter();+IT

int
这里是类型指针指向的,它在这里完全不相关。指针的大小是固定的,不取决于指针的类型,并且该大小至少是
size\u t
(通常是相同的),因此没有危险。

您似乎将
int
int*
混淆了。将
size\u t
添加到
int*
是这些类型的正确用法。(值可能不正确,但类型是兼容的,通常大小相同)。此代码非常糟糕。把这本书扔出气闸。谢谢你的努力!我已经得到了:-)VioletGiraffe Yeah,我明白了,C++中的约定应该是(AutoITER = V.Read),ITER!= v Enter();+ITER)。谢谢你指出这一点不,这代码是无效的。它使用了名称
arr
sz
,但它们没有定义。哦,我知道了。int*和int是两种不同的类型,所以我无法比较它们的值。谢谢从技术上讲,无法保证指针和大小相同。具有“fat”指针(包含有关允许访问的信息)的系统可能具有比大小大得多的指针。类似于实数模式DOS,指针表示为32位段+偏移量,但只允许适合单个段的对象,因此大小仅需为16位也是合法的。此外,还明确允许void*和char*大于struct*。我记不起int*的保证是什么(除了void*是“足够”之外,可能没有任何保证)
int *b = arr, *e = arr + sz; // sz has a type of size_t
while (b < e)
{
  // use *b
  ++b;
}