#include <iostream>
using namespace std;
int main(){
int arr[4] = {1,2,3,4};
int arr2[4] = {5,6,7,8};
int **arrPtr;
arrPtr[0] = arr;
arrPtr[1] = arr2;
for (int *a : arrPtr ){
for (int i : a){
cout << i << endl;
}
}
}
我知道这种实现不是要走的路,而是要在最后显示内涵。基本上我试图打印另一个双指针列出的数组的内容。 有没有办法让这段代码有效?
答案 0 :(得分:3)
#include <iostream>
int main() {
int m[][4] = {
{ 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 0, 1 },
{ 2, 3, 4, 5 },
};
for(auto &line : m) {
for(auto &value : line) {
std::cout << value << ' ';
}
std::cout << std::endl;
}
}
http://coliru.stacked-crooked.com/a/d603241402fcc886
请注意,这也有效:
#include <iostream>
int main() {
for(auto &line : (int [][4])
{
{ 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 0, 1 },
{ 2, 3, 4, 5 },
}) {
for(auto &value : line) {
std::cout << value << ' ';
}
std::cout << std::endl;
}
}
答案 1 :(得分:0)
新的range-for循环不适用于原始指针类型,因为它们不包含大小信息。如果你在编译时知道它们的长度,你可以将它们作为指向数组的指针并在range-for中使用。这样的代码可能很适合,但可以使用std::array
,std::vector
进行实际使用。
#include <iostream>
#include <memory>
using namespace std;
int main(){
int arr[4] = {1,2,3,4};
int arr2[4] = {5,6,7,8};
unique_ptr<int*[]> arrPtrHolder(new int*[2]);
int **arrPtr = arrPtrHolder.get();
arrPtr[0] = arr;
arrPtr[1] = arr2;
for (int *a : *(int*(*)[2])(arrPtr)){
for (int i : *(int (*)[4])(a)){
cout << i << endl;
}
}
}