Jump to content
PlayMa256

Duvida quanto a ponteiros

Recommended Posts

PlayMa256

Ola, estou a estudar para um exame, e estou com algumas duvidas em ponteiros.

quando se tem:

int funcao (int *vector)

esta a apontar para um endereço qualquer certo? na hora de se chamar a funcao se deve chamar dessa meneira?

int resultado = funcao(vetor);

Um ponteiro quando referenciado dessa maneira:

 int *ponteiro = vetor[];

O conteudo dele, sera o conteudo do vetor inteiro?

Ao se printar um ponteiro, quando se coloca:

 printf("%d", *ponteiro);

Ele irá printar o conteudo do que o ponteiro aponta certo? e se apontar para um vetor?

Bom, acho que até agora sao só essas mesmo.

Obrigado.

Share this post


Link to post
Share on other sites
PlayMa256

Outra duvida, achei alguns exemplos na net, e fiquei com duvida.

quando se tem assim:

int *p;
int *q;
int x = 10;

p = &x; //aqui tudo bem, recebe o endereço de x.
q = p;  //aqui q recebe o que tem em p, no caso, o endereço de x;
*q = *p + x;  // aqui, pela logica é que q vai receber 10 + 10 certo? até ai ok.

porem no print do teste que o site fez, aparecia:

Valor de *q: 20, valor de *p: 20, valor de x: 10;

o valor de *p nao seria 10?

Edited by PlayMa256

Share this post


Link to post
Share on other sites
polska

o valor de *p nao seria 10?

Não, *p é 20, o que está mal ai é dizerem que o valor de x fica 10 , isso está mal porque x também fica igual a 20 ...

#include <stdio.h>

int main(){

   int *p, *q;
   int x = 10;

   p = &x; // p obtém o endereço de x
   q = p; // q obtém o endereço de p, que é o mesmo que dizer que obtém o endereço de x
   *q = *p + x; // o valor de q é alterado, como o endereço de p e x é o mesmo de q, os valores também são alterados nessas variáveis 

   printf("%d %d %d", *p, *q, x); // 20 20 20

}

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
PlayMa256

o valor de q é adicionado 10 certo? em razao do x correto?

entao quando tenho variaveis que obtem o mesmo endereço , como no exemplo, mudando o valor de uma, mudo o valor de todas?

Share this post


Link to post
Share on other sites
polska

o valor de q é adicionado 10 certo? em razao do x correto?

*q é igual ao valor de p + o valor de x ..

int *p, *q;
int x = 10;

p = &x; // *p = 10
q = p;
*q = *p + x; // *q = 10 + 10;

entao quando tenho variaveis que obtem o mesmo endereço , como no exemplo, mudando o valor de uma, mudo o valor de todas?

Sim, quando alteras o valor de um ponteiro, a variável cujo ponteiro está endereçado também altera de valor. Neste caso, se alterares *p ou *q estarias a alterar x .

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
polska

Ola, estou a estudar para um exame, e estou com algumas duvidas em ponteiros.

quando se tem:

int funcao (int *vector)

esta a apontar para um endereço qualquer certo? na hora de se chamar a funcao se deve chamar dessa meneira?

int resultado = funcao(vetor);

Não está a apontar para um endereço qualquer, aponta para o endereço da variável que passas como parâmetro quando invocas a função.. Nesse caso vai apontar para o inteiro que passares ao invocares a função. Se passares um inteiro normal, aponta para o seu endereço em memória, se passares um vector, aponta para o endereço em memória do primeiro elemento desse vector.

Um ponteiro quando referenciado dessa maneira:

 int *ponteiro = vetor[];

O conteudo dele, sera o conteudo do vetor inteiro?

Ao se printar um ponteiro, quando se coloca:

 printf("%d", *ponteiro);

Ele irá printar o conteudo do que o ponteiro aponta certo? e se apontar para um vetor?

Bom, acho que até agora sao só essas mesmo.

Obrigado.

Um ponteiro quando referenciado a um vector, aponta para a posição do primeiro elemento em memória, como eu disse em cima. Depois de o ponteiro apontar para o vector, podes usa-lo para imprimir os valores da mesma maneira que irias imprimir caso fosse o vetor normal.

#include <stdio.h>

int main(){
   int idades[6] = {2,3,4,5,6,8};
   int *v;

   v = idades;

   printf("%d %d\n", idades[0], idades[5]); // 2 8
   printf("%d %d\n", v[0], v[5]); // 2 8

   return 0;
}

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
PlayMa256

entao no caso de vetores um ponteiro apontando pra ele seria quase a mesma coisa que fazer vetor[posiçao] ? nossa!!

Share this post


Link to post
Share on other sites
polska

entao no caso de vetores um ponteiro apontando pra ele seria quase a mesma coisa que fazer vetor[posiçao] ? nossa!!

Seria quase a mesma coisa, se quiseres referenciar um vetor a um ponteiro dessa maneira então tens de usar o sinal & .

#include <cstdio>

int main(){
   int idades[6] = {2,3,4,5,6,8};
   int *v;

   v = &idades[0]; 

   printf("%d\n", v[2]); // 4

   return 0;
}

Espero que seja esta a dúvida, pois não percebi muito bem.

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
PlayMa256

na verdade me explicou sim, pq é quase a mesma coisa da de cima.

ao apontar para um vetor, vc usou o ponteiro com a posicao do vetor, isso que quiz dizer.

int main(){
int idades[6] = {2,3,4,5,6,8};
int *v;

v = idades;   //aqui

printf("%d %d[b]\n[/b]", idades[0], idades[5]); [i]// 2 8[/i]
printf("%d %d[b]\n[/b]", v[0], v[5]); [i]// 2 8[/i]

return 0;
}

mas obrigado. espero que o exame de amanha seja bom.

structs, matriz, string, ponteiro, funcoes, recursao....

Edited by PlayMa256

Share this post


Link to post
Share on other sites
polska

Boa sorte !


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.