int test[3][2] = {{1,4},{2,5},{2,8}};
// Define a pointer to walk the rows of the 2D array.
int (*p1)[2] = test;
// Define a pointer to walk the columns of each row of the 2D array.
int *p2 = NULL;
// There are three rows in the 2D array.
// p1 has been initialized to point to the first row of the 2D array.
// Make sure the iteration stops after the third row of the 2D array.
for (; p1 != test+3; ++p1) {
// Iterate over each column of the arrays.
// p2 is initialized to *p1, which points to the first column.
// Iteration must stop after two columns. Hence, the breaking
// condition of the loop is when p2 == *p1+2
for (p2 = *p1; p2 != *p1+2; ++p2 ) {
printf("%d\n", *p2);
}
}
5条答案
按热度按时间ijnw1ujt1#
8cdiaqws2#
尝试以下操作并进行调查
该putput是
第一个指针是指向
int[2]
类型的对象的指针,即它指向数组的第一个“行”,然后由于增量,它指向其他行。第二个指针是指向int
类型对象的指针。它指向内部循环中每一行的第一个元素。mbjcgjjk3#
在某些编译器中,您还可以使用单个循环,将多维数组视为按行优先顺序读取的一维数组。
这在King's C Programming: A Modern Approach(第2版,p268)中提到。
7eumitmz4#
将2d数组视为1d数组非常容易使用指针算法进行迭代。
4dbbbstv5#
如果指针声明是您练习的目标,请使用以下初始化:
一旦你这样做了,使用指针索引的语法就像数组索引的语法一样,除了你必须使用
*
解引用操作符。但是,如果指针算法是您练习的目标,那么以下内容也可以工作:
输出