我有兩個二維數組,我不知道爲什麼,或者如何,每個數組中的兩個元素之一的地址重合.. 這裏是源代碼:地址重合(指針,C編程)
#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("");}
}
而這裏的打印屏幕;
由於這一點,我已經越來越錯誤在一個簡單的程序來計算兩個矩陣的乘積。問題是,這是通常的嗎?編譯器或操作系統不應該照顧這個嗎?
而且,爲什麼我要做ptr = (a+i*(n-1)+i+j); printf(" %d ",*ptr);
?
爲什麼不printf(" %d ",*(a+i*(n-1)+i+j));
工作?
您的變量名稱非常可怕。 – ThiefMaster 2012-01-10 18:45:47
@TheifMaster @TheifMaster在這種情況下,他們是可以的,因爲他們匹配在這種情況下的數學領域。 – Mark 2012-01-10 18:47:48
@ThiefMaster,'i'和'j'是計數器; 'a'和'b'是矩陣; 'a'是'm' X'n'; 'b'''''''''' – 2012-01-10 18:48:47