這裏路過2維陣列成一個函數是我的代碼(幻方)的示例:使用指針Ç
int magicsqr(int *magic,int size);
int main()
{
int size,*ptr;
char stop;
repeat:
printf("Please Enter an Odd number for the magic square(3 or greater):\n");
scanf("%d",&size);
fflush(stdin);
ptr=(int*)calloc(size*size,sizeof(int));
while((size%2==0)||(size<=1))
{
printf("U entered a wrong number.\n");
repeat1:
printf("Do you wish to continue?(Y or N)\n");
scanf("%c",&stop);
fflush(stdin);
if(stop=='Y'||stop=='y')
goto repeat;
else if(stop=='N'||stop=='n')
printf("Thanks for trying our beta program.\n");
else
{
printf("U entered a wrong character.\n");
goto repeat1;
}
}
magicsqr(ptr,size);
return 0;
}
int magicsqr(int *magic,int size)
{
int i,j,num;
i=1;
j=(size+1)/2;
for(num=1;num<=size*size;num++)
{
*(magic+i*size+j)=num;
if(num%size==0){
i++;
continue;
}
if(i==1)
i=size;
else
i--;
if(j==size)
j=1;
else
j++;
}
for(i=1;i<=size;i++)
{
printf("\n");
for(j=1;j<=size;j++)
printf("%d\t",*(magic+i*size+j));
}
}
所以我得到了困惑我幾個問題..
1-至於因爲我知道Arr[i][j]==*(Arr[i]+j)
所以爲什麼只有這個作品:*(magic+i*size+j)
。
2-我讀了很多將2維數組傳遞給使用指針的函數,但不知何故,我仍然感到困惑,如何在此代碼中表示2D數組或更多。
3-我仍然是編程的初學者,所以我希望你能解釋一點。
- 非常感謝很多人,最後我得到了它使用指針指針和數組指針。
1.從代碼中刪除I/O代碼,只留下重要部分。 2。澄清你的期望和你實際得到的結果 – michaldo
我的代碼運行良好並且打印結果正確,但是我需要一些解釋,我不知道它爲什麼會像這樣工作 –
代碼中沒有2D數組。 'fflush(stdin)'是未定義的行爲。 – Olaf