我想要的是只使用指针遍历数组:
int I[5][5] = { { 10, 20, 30, 40, 50},
{ 11, 21, 31, 41, 51},
{ 12, 22, 32, 42, 52},
{ 13, 23, 33, 43, 53},
{ 14, 24, 34, 44, 54} };
因此,使用for
循环,我可以使用指针而不是索引打印数组的值,如下所示:
for(int(*p)[5] = I ; p<I+(sizeof(I)/sizeof(I[0])) ; p++){
for(int* q=*p ; q<*(p+1) ; q++){
cout<<*q<<" ";
}
cout<<endl;
}
但是,如果我想访问*q
下面的下两个值,我怎么得到它们呢?例如,如果*q
等于10,在同一次迭代中,我也想得到11和12。当*q
= 32时,我想得到33和34。
我试着创建像这样的指针,但我不知道还能做什么:
int* p_ini = *(I);
int* p_fin = *(I+4);
int* q_ini = p_ini;
int* q_fin = (p_ini+4);
同样,所有这些都不使用任何索引。
如果您有一个指向外部数组(p
)的元素的int(*)[5]
指针,将该指针增加1
将获得指向外部数组(p+1
)的下一个元素的int(*)[5]
指针,再增加1
以获得下一个元素(p+2
),依此类推。
然后,你可以解引用这些指针中的每一个,以获得指向这些内部数组(q
,q2
,q3
等)第一个元素的int*
指针。
然后,您可以将int*
指针增加所需的元素数量(您可以在迭代p
所指向的早期内部数组时轻松计算),即*q==10
时*(q2+0)
和*(q3+0)
,*(q2+2)
和*(q3+2)
时*q==32
,等等。
例如:
for(int(*p)[5] = I; p < I+(sizeof(I)/sizeof(I[0])); ++p){
for(int *first = *p, *q = first; q < *(p+1); ++q){
if (*q == 10 || *q == 32) {
size_t offset = q - first;
int *q2 = *(p+1) + offset;
int *q3 = *(p+2) + offset;
cout << *q << ": " << *q2 << ", " << *q3 << endl;
}
}
}
在线演示