前辈看一个程序错哪里了? #include<stdio.h> int main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; p=a; printf("please enter row and colum:"); scanf("%d,%d",&i,&j); printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j)); return 0; } [解决办法] p+i没什么道理,想直接操作地址不安全 [解决办法]
printf("a[%d,%d]=%d\n",i,j,*((p+i*j)+j));
[解决办法]
printf("a[%d,%d]=%d\n",i,j,*(*(p+i*4)+j));
[解决办法]
printf("a[%d,%d]=%d\n",i,j,*((p+i*4)+j));
还有2楼说的不安全 [解决办法] #include <stdafx.h> void main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; p=a; printf("please enter row and colum:"); while(scanf("%d,%d",&i,&j)!=EOF) { if (i>2 [解决办法] j>3) { printf("input wrong!\n"); getchar(); break; } printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j)); getchar(); } getchar(); } 我可以正确的看到每一个元素啊,怎么了,哪里错了? [解决办法] scanf("%d,%d",&i,&j); 输入是用 , 分隔
下标从 0 开始,别越界
程序没有大问题 [解决办法] #include<stdio.h> int main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; p=a; printf("please enter row and colum:"); while(scanf("%d,%d",&i,&j) != 2); //scanf("%d,%d",&i,&j); fflush(stdin); printf("a[%d,%d]=%d\n",i,j,*(*(p+i-1)+j-1));////你认为错的是这里吧??? return 0; }
楼上正解,下标从 0 开始,别越界 [解决办法]
#include<stdio.h> int main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; p=a; printf("please enter row and colum:"); scanf("%d%d",&i,&j); //这里多了个逗号 printf("a[%d,%d]=%d\n",i,j,p[i][j]); //重点是这个,p不是二级指针 printf("%d\n",a[i][j]); return 0; }