fork download
  1. #include <stdio.h>
  2.  
  3. void func1(int x) { //o valor do argumento é copiado para x
  4. printf("endereço de x: %p\n", (void *)&x); //peguei o endereço de x
  5. x = 9 * x; //mudou o parâmetro e logo em seguida é descartado
  6. printf("endereço de x: %p\n", (void *)&x); //peguei o endereço de x
  7. }
  8.  
  9. void func2(int v[]) { //o valor do argumento é copiado para x, no caso é o valor do poneiro
  10. printf("endereço de v: %p\n", (void *)v); //v já é um endereço
  11. v[0] = 9 * v[0]; //o valor apontado para o primeiro elemento no objeto é mudado
  12. printf("endereço de v: %p\n", (void *)v); //v já é um endereço
  13. }
  14.  
  15. int main () {
  16. int x = 111, v[2]; //x tem um valor direto na variável x, v tem um ponteiro para outro objeto
  17. func1(x); //111 é passado para a função, só isso, nada a ver com x
  18. printf("endereço de x: %p\n", (void *)&x); //peguei o endereço de x
  19. printf("x: %d\n", x); //x aqui continua sem ser alterado
  20. printf("endereço de x: %p\n", (void *)&x); //peguei o endereço de x
  21. printf("endereço de v: %p\n", (void *)v); //v já é um endereço
  22. v[0] = 111; //colocou um valor lá no objeto criado para ser o array
  23. printf("endereço de v: %p\n", (void *)v); //v já é um endereço
  24. func2(v); //o endereço da memória onde foi colocado o objeto array é passado para a função
  25. printf("endereço de v: %p\n", (void *)v); //v já é um endereço
  26. printf("v[0]: %d\n", v[0]); //acessando um dos elementos ele foi alterado
  27. }
  28.  
  29. //https://pt.stackoverflow.com/q/472085/101
Success #stdin #stdout 0s 4504KB
stdin
Standard input is empty
stdout
endereço de x: 0x7fff83675e7c
endereço de x: 0x7fff83675e7c
endereço de x: 0x7fff83675e9c
x: 111
endereço de x: 0x7fff83675e9c
endereço de v: 0x7fff83675ea0
endereço de v: 0x7fff83675ea0
endereço de v: 0x7fff83675ea0
endereço de v: 0x7fff83675ea0
endereço de v: 0x7fff83675ea0
v[0]: 999