#include<stdio.h>
#include<stdlib.h>
void print(int *s);
/*这是一个指定行数列数,打印出二维数组中对应元素的值的程序。*/
void main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[4];
p=a;
print(*p);
system("pause");
}
void print(int *s)
{
int i,j,a;
x:
printf("横向=");
scanf("%d",&i);
if(i>2||i<0)
{
goto x;
}//如果用户输入错误,则要求重新输入。
y:
printf("纵向=");
scanf("%d",&j);
if(j>3||j<0)
{
goto y;
}//如果用户输入错误,则要求重新输入。
a=*( s + j + ( i*4 ));//取得纵向的值后,乘上行数便是要求的值。
//这里是我最头痛的地方,出于无奈才这么写了。为什么用“*(*(s+i)+j)”就会提示非法的间接寻址?
printf("a[%d][%d]=%d",i,j,a);
}
如果要写成*(*(s+i)+j)的形式,应该如何定义呢?
追答那么 形参 用 int **s, 接着 你的调用 方法和实参也要作相应调整。
/*
0 横向,1 纵向 : 1
1 5 9
2 6 10
3 7 11
4 8 12
请按任意键继续. . .
Press any key to continue
*/
#include<stdio.h>