我有两个二维数组,我不知道为什么或如何,每个数组中的两个元素的地址重合.这是源代码:
#include <stdio.h>
int main()
{
int i,j,m,n,o,p,*ptr;
printf("Enter dimension of 1st matrix: ");
scanf("%d * %d",&m,&n);
printf("Enter dimension of 2nd matrix: ");
scanf("%d * %d",&o,&p);
int *a[m][n];
int *b[o][p];
if (n!=o) return 0;
printf("\nEnter 1st matrix:\n");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{ printf("%d ",(a+i*(n-1)+i+j)); scanf("%d",(a+i*(n-1)+i+j)); }
printf("\nEnter 2nd matrix:\n");
for (i=0;i<o;i++)
for (j=0;j<p;j++)
{ printf("%d ",(b+i*(p-1)+i+j)); scanf("%d",(b+i*(p-1)+i+j)); }
/*Printing the matrices*/
puts("");puts("");
for (i=0;i<m;i++)
{for (j=0;j<n;j++)
{ ptr = (a+i*(n-1)+i+j);
printf(" %d ",*ptr); } puts("");}puts("");
for (i=0;i<o;i++)
{for (j=0;j<p;j++)
{ ptr = (b+i*(p-1)+i+j);
printf(" %d ",*ptr); } puts("");}
}
Run Code Online (Sandbox Code Playgroud)
这是一个打印屏幕;
因此,我在一个简单的程序中得到错误来计算两个矩阵的乘积.问题是,这是通常的吗?编译器或操作系统不应该处理这个问题吗?
另外,我为什么要这样做ptr = (a+i*(n-1)+i+j); printf(" %d ",*ptr);?
为什么不行printf(" %d ",*(a+i*(n-1)+i+j));?
首先,a和b为指针数组和指针永远不会初始化.
int *a[m][n];
int *b[o][p];
Run Code Online (Sandbox Code Playgroud)
我的猜测是它的意思是:
int a[m][n];
int b[o][p];
Run Code Online (Sandbox Code Playgroud)
(其余代码需要相应更改.)
其次,你将指针视为ints(例如%d).请记住,指针可以宽于int.例如,在我的平台上,指针是64位并且ints是32位.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |