3
respostas

Ponteiros realmente só guardam um endereço de memória?

Estou com uma dúvida no seguinte código

#include <stdio.h>

void somaDois(long numeroEnd) {
    int* numeroPtr = numeroEnd;

    *numeroPtr += 2;
}

int main() {

    int numero = 5;
    //int* numeroPtr;

    somaDois(&numero);
    printf("%d\n", numero);


}

Se um ponteiro guarda um endereço de memória, por que eu recebo warnings dizendo que na linha onde o ponteiro numeroPtr recebe o valor numeroEnd não se pode fazer uma conversão? Para mim essa operação faz sentido, uma vez que ao chamar a função somaDois, passo o endereço da memória. Ao executar a função somaDois, o ponteiro vai receber esse endereço (número).

3 respostas

O problema não é a conversão. São dois problemas que você tem, o primeiro você passando uma variavel do tipo int e esta recebendo como long. O segundo é que você passando um ponteiro na função, mas não esta recebendo um ponteiro

void somaDois(long numeroEnd)

Deveria ficar da seguinte maneira:

void somaDois(int* numeroEnd)

Assim consegue passar um ponteiro para sua função.

Sei como fazer a forma correta, só não entendo o por que do meu jeito não funcionar.

Na verdade, até funciona, mas com warnings.

Pra mim, o ponteiro vai guardar um número referente a o endereço de memória. Não passa de um número.

Eu não estou passando uma variável de tipo int, estou passando seu endereço de memória (ex: -538232356) e estou recebendo um long (tipo capaz de armazenar esse número grandão que é o endereço da memória). Daí, dentro da função, como eu achava que o ponteiro só guardava o endereço de memória (numero long), eu poderia fazer

int* numeroPtr = numeroEnd;

você tentando fazer um cast de um ponteiro de inteiro para uma variável do tipo long. Isso não deve funcionar mesmo. Qual o motivo de querer realizar essa operação??