comecei a pouco tempo a aprender a linguagem C, e estava hoje a ler um tutorial que tenho seguido. terminei a secção de ponteiros e estava a fazer um exercicio que lá tinha, que consiste em, numa matriz bidimensional 10x10, colocar todos os valores a 0, depois preencher a matriz com números de um a 100, e depois mostrar esses mesmos valores, tudo isto usando ponteiros.
aqui está o código que eu fiz para o exercicio
e aqui está um printscreen do resultado ao executar este programa:
ora como talvez já tenham reparado, no ultimo ciclo FOR eu tenho 5 vezes seguidas a função printf. eu sei que posso juntar tudo isso num só printf, mas ai e que está o problema. se fizesse isso, então era só substituir todos esses printfs por isto:
mas ao por assim, vejma o que acontece ao resultado:
porque é que da segunda maneira, cada linha fica na ordem inversa? não percebo mesmo...
aqui está o código que eu fiz para o exercicio
Código:
#include <stdio.h>
int main()
{
int mtz[10][10], *p, x;
/* poe a zero todos os valores da matriz */
p=mtz[0];
for (x=0;x<100;x++)
{
*p=0;
p++;
}
/* preenche a matriz com nºs de 1 a 100 */
p=mtz[0];
x=0;
for(x=0;x<100;x++)
{
*p=x+1;
p++;
}
/* mostra os nºs da matriz (5 por linha) */
p=mtz[0];
for(x=0;x<20;x++)
{
printf("%5d", *(p++));
printf("%5d", *(p++));
printf("%5d", *(p++));
printf("%5d", *(p++));
printf("%5d\n", *(p++));
}
}
ora como talvez já tenham reparado, no ultimo ciclo FOR eu tenho 5 vezes seguidas a função printf. eu sei que posso juntar tudo isso num só printf, mas ai e que está o problema. se fizesse isso, então era só substituir todos esses printfs por isto:
Código:
printf("%4d %4d %4d %4d %4d\n", *(p++), *(p++), *(p++), *(p++), *(p++));
porque é que da segunda maneira, cada linha fica na ordem inversa? não percebo mesmo...