gpt4 book ai didi

c++ - 使用指针迭代数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:36 25 4
gpt4 key购买 nike

我尝试执行代码:

char* m[3] = {"123", "456", "789"};
for(char* st=*m; st!=0; st=*(m+1))
{
cout <<st;
}

但它挂断并打印:123456456456...

最佳答案

你写的循环无效

char* m[3]={"123","456","789"};
for(char* st=*m;st!=0; st=*(m+1))
{
cout <<st;
}

表达式 *m 的类型为 char * 并且数组 m 不包含 NULL 指针。所以条件 st!=0;是错的。指针总是指向同一个元素,因为表达式 st=*(m+1) 总是给出数组的第二个元素

还要考虑到数组的正确定义将是

const char* m[3] = { "123", "456", "789" };

因为它是一个指向字符串文字的指针数组,并且字符串文字可能不会更改。

您可以简单地使用基于范围的 for 语句

const char* m[3] = { "123", "456", "789" };
for ( const char* st : m )
{
cout <<st << std::endl;
}

或者您可以在循环中使用迭代器。例如

const char* m[3] = { "123", "456", "789" };
for ( auto it = std::begin( m ); it != std::end( m ); ++it )
{
cout << *it << std::endl;
}

你可以使用标准算法 std::copy

#include <iostream>
#include <algorithm>
#include <iterator>

//,,,
const char* m[3] = { "123", "456", "789" };
std::copy( std::begin( m ), std::end( m ),
std::ostream_iterator<const char *>( std::cout, "\n" ) );

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

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