gpt4 book ai didi

c++ - 使用指针写入数组元素的问题

转载 作者:行者123 更新时间:2023-11-30 00:42:56 24 4
gpt4 key购买 nike

第一个循环是完美的。第二行不通。“Z”有什么问题。为什么循环不停止?当我在表中给出“Z”时,循环没有反应。

#include <iostream>
using namespace std;

int main()
{
char tab[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z' };

char *wsk = tab;

while(*wsk <= 'Y')
{
cout << *wsk << " ";
wsk++;
}
cout << endl;

wsk = tab;
while(*wsk <= 'Z')
{
cout << *wsk << " ";
wsk++;
}
cout << endl;
}

最佳答案

'Z'是数组的最后一个元素。在(应该是)最后一次迭代结束时,wsk递增以指向超出数组的最后一个元素。在下一次迭代中,*wsk <= 'Z'通过超出范围的指针进行间接访问,尝试访问不存在的对象,并且程序的行为未定义。

循环整个数组的简单解决方案:

for(char c : tab)

使用指针的解决方案:

char* end = std::end(tab);
for(char* wsk = tab; wsk != end; wsk++)

您可以根据条件提前中断循环:

for(char c : tab) {
std::cout << c;
if (c >= 'Z')
break;
}

如果你特别想要一个循环,当遇到某个值时结束,但是那个元素也必须迭代,并且确定该值保证存在,并且由于某种原因无法知道数组的长度,那么你可以使用:

wsk = tab;
do {
char c = *wsk++;
std::cout << c;
} while(c < 'Z');

但请注意,如果数组中不存在该元素,这也会有 UB。

关于c++ - 使用指针写入数组元素的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57313690/

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