你写的循环无效
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" ) );