Você está atribuindo o valor 1 ao ponteiro a que é um parâmetro.
A solução é atribuir o valor 1 ao inteiro que é referenciado pelo ponteiro: *a = 1
Ative os warnings de seu compilador, se tivesse ativo já saberia do problema. Acho que Clang até gera erro em lugar de warning. Mas se não avisar mude de compilador.
Isso funcionou, porém se eu passar mais de um parâmetro em minha função não funciona, o segundo valor é 0, no caso do exemplo abaixo o “b=2”.
#include <stdio.h>
int a1=0;
int b1=0;
int a2=0;
int b2=0;
int passagem(int *a, int *b) {
return *a=1;
return *b=2;
}
int main() {
passagem(&a1, &b1);
passagem(&a2, &b2);
printf("%i %i",a1,b2);
printf("%i %i",a2,b2);
}
O comando return tem a seguinte forma geral: return valor_de_retorno; ou return;
Digamos que uma função está sendo executada. Quando se chega a uma declaração return a função é encerrada imediatamente e, se o valor de retorno é informado, a função retorna este valor.
int passagem(int *a, int *b) {
*a=1;
*b=2;
return *a;
}
Isso caso for necessário realmente retornar alguma coisa. Caso não for é só declarar teu procedimento como retornando void, ou seja, muda para void passagem(int *a, int *b) { e remove o return.