Вот пример моего кода (магический квадрат):Передача 2 двумерный массив в функцию с помощью указателя C
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. Извлеките код ввода/вывода из кода и оставьте только важную часть. 2.Уточняйте, что вы ожидаете, и что вы получаете на самом деле. – michaldo
. Мой код хорошо работает и печатает результат правильно, но мне нужно какое-то объяснение в моем коде, что я не знаю, почему он так работал. –
В вашем коде нет 2D-массива. И 'fflush (stdin)' - неопределенное поведение. – Olaf