Problemas com malloc e parâmetros

Problemas com malloc e parâmetros

por William Gnann -
Número de respostas: 2

Olá,

Estava fazendo um exercício envolvendo funções que fazem coisinhas com matrizes e vetores. Deparei-me com os seguintes dilemas.

1) Por que quando eu declaro a matriz dentro do escopo da função ela não é devolvida direito para o nível que chamou essa função?

2) Por que quando eu aloco a matriz dentro do escopo da função ela é devolvida direito para o nível que chamou essa função?

3) Por que quando eu passo a matriz como parâmetro e mexo nela dentro da função, devolvo-a alterada? Por que isso não acontece quando eu passo um inteiro?

Até!

Em resposta à William Gnann

Re: Problemas com malloc e parâmetros

por Henrique Morimitsu -

Oi William,

Não sei se é um pouco tarde, mas seguem as respostas:

1) Como ela foi declarada dentro da função, ela só "existe" enquanto você está na função, e ela é destruída assim que você sai dela.

2) Se você a declarou fora da função, e só a alocou lá dentro, isso funciona pois o espaço de memória para a matriz não é perdido após sair da função, como no primeiro caso. Além disso, como matrizes são tratadas como ponteiros, mudanças feitas sobre eles mesmo dentro de outras funções são percebidas mesmo quando retornamos da função. 

3) Isso tem a ver com o que chamamos de passagem por valor ou passagem por referência. Quando passamos um ponteiro (como uma matriz), estamos passando uma referência (endereço de memória) para a variável. Neste caso, mudanças realizadas lá são percebidas por todos, já que todos estarão acessando o mesmo endereço de memória que foi alterada. No caso de outras variáveis simples (int, float, struct sem ponteiros, etc.), as passagens são feitas por valor, ou seja, não estamos passando apenas o valor da variável, não ela propriamente dita. Em outras palavras, passamos uma cópia de seu valor. Assim, mudanças feitas sobre esses valores são perdidos, já que são apenas cópias.

Espero ter ajudado.

Henrique