*指针与多维数组
- 每一维的数组名为 a[i]。
-
a[i]+1 是 a[i][1] 的地址;a[i]+j 是 a[i][j] 的地址。
*(a[i]+1) 是 a[i][1] 的间接引用形式;*(a[i]+j) 是 a[i][j] 的间接引用形式。 -
a是 a[0] 的地址,a+1 是 a[1] 的地址,a+i 是 a[i] 的地址。
*(a+i) 是 a[i] 的间接引用形式。 -
*(a+i)+1 是 a[i][1] 的地址;*(a+i)+j是 a[i][j] 的地址。
*(*(a+i)+j) 是 a[i][j] 的间接引用形式。 -
行指针:地址 a+i,i 表示指向下 i 行
元素指针:地址 *(a+i)+j,j 表示指向同一行下 j 个元素
1. 有一个3*4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值(使用制表符\t)。
二维数组 a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
#include <stdio.h> int main() { int i,j,a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%d\t",*(*(a+i)+j));//该位置控制制表格式 } if(i==2) { break;//最后一行不换行 } printf("\n");//该位置控制换行输出 } return 0; }
2. 有一个班3名学生,各学4门课程,计算总平均分数以及第3个学生的成绩。
各科成绩如下:

#include <stdio.h> int main() { int i,j; double a[3][4]={65,67,70,60, 80,87,90,81, 90,99,100,98},avg,sum; sum=0.0; for(i=0;i<3;i++) { for(j=0;j<4;j++) { sum=sum+*(*(a+i)+j); } } avg=sum/(3*4); printf("average = %.2f\n",avg); printf("the score of NO.3 are:\n"); for(j=0;j<4;j++) { printf("%.2f",*(a[2]+j)); if(j==3) { break; } printf(" "); } return 0; }
3. 有一个班3名学生,各学4门课程,
查找有一门及以上课程不及格的学生,输出他们的全部课程成绩。
各科成绩如下:

#include <stdio.h> int main() { int i,j,number=0; double a[3][4]={65,57,70,60, 58,87,90,81, 90,99,85,98}; for(i=0;i<3;i++) { for(j=0;j<4;j++) { if(*(a[i]+j)<60) { number++; if(number!=1) { printf("\n"); } printf("No.%d:\n",number); printf("%.1f %.1f %.1f %.1f",*a[i],*(a[i]+1),*(a[i]+2),*(a[i]+3)); break; } } } return 0; }
-END

浙公网安备 33010602011771号