Olá pessoal, estou com uma simples dúvida, estou estudando ponteiros e está dificil de entender como eles funcionam, primeiro tentei fazer um simples algoritmo para trocar o valor de duas variáveis, mas não está dando certo, da o seguinte erro:
[color=olive]teste.c: Na função ?main?:
teste.c:20:10: aviso: initialization makes pointer from integer without a cast [habilitado por padrão]
teste.c:20:16: aviso: initialization makes pointer from integer without a cast [habilitado por padrão]
[/color]
OBs: estou usando o gcc.
#include <stdio.h>
void Troca(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
printf("i = %d \nj = %d", *p, *q);
}
int main () {
int *i=1, *j=3;
Troca(i,j);
}
vamos lá. primeiramente, a principal característica de um apontador é que ele aponta para algum lugar (no caso, um endereço de memória). Você já aprendeu o operador &? O & serve para, entre outras coisas, referenciar um endereço de memória (a grosso modo).
Quando você quer dizer que um apontador para inteiro *i deve receber o valor 3, se você faz a instrução *i = 3, você não diz para onde o apontador tem que apontar. Isso no Windows 98 causava muito problema…
remodelando seu código, você deve fazer assim:
#include <stdio.h>
void Troca(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
printf("i = %d \nj = %d", *p, *q);
}
int main () {
int *i, *j;
int a = 1, b = 3;
i = &a; // i vai apontar para o endereço de a
j = &b; // j vai apontar para o endereço de b
Troca(i,j);
}