Lo siento si esta publicación parece ignorante, pero todavía soy muy nuevo en C, por lo que no lo entiendo muy bien. En este momento estoy tratando de averiguar los punteros.
Hice este fragmento de código para probar si puedo cambiar el valor de b en la función de cambio, y hacer que se transfiera a la función principal (sin regresar) pasando el puntero.
Sin embargo, me sale un error que dice.
Initialization makes pointer from integer without a cast
int *b = 6
Por lo que entiendo,
#include <stdio.h>
int change(int * b){
* b = 4;
return 0;
}
int main(){
int * b = 6;
change(b);
printf("%d", b);
return 0;
}
Lo que realmente me preocupa es corregir este error, pero si mi comprensión de los punteros es completamente incorrecta, no me opondría a las críticas.
Para que funcione, reescriba el código de la siguiente manera:
#include <stdio.h>
int change(int * b){
* b = 4;
return 0;
}
int main(){
int b = 6; //variable type of b is 'int' not 'int *'
change(&b);//Instead of b the address of b is passed
printf("%d", b);
return 0;
}
El código anterior funcionará.
En C, cuando desea cambiar el valor de una variable en una función, “pasa la variable a la función por Referencia“. Puedes leer más sobre esto aquí – Pasar por Referencia
Ahora el error significa que está tratando de almacenar un número entero en una variable que es un puntero, sin encasillar. Puede hacer que este error desaparezca cambiando esa línea de la siguiente manera (pero el programa no funcionará porque la lógica seguirá siendo incorrecta)
int * b = (int *)6; //This is typecasting int into type (int *)
Tal vez querías hacer esto:
#include <stdio.h>
int change( int *b )
{
*b = 4;
return 0;
}
int main( void )
{
int *b;
int myint = 6;
b = &myint;
change( &b );
printf( "%d", b );
return 0;
}
#include <stdio.h>
int change(int * b){
* b = 4;
return 0;
}
int main(){
int b = 6; // <- just int not a pointer to int
change(&b); // address of the int
printf("%d", b);
return 0;
}
Tal vez demasiado tarde, pero como complemento al resto de las respuestas, solo mis 2 centavos:
void change(int *b, int c)
{
*b = c;
}
int main()
{
int a = 25;
change(&a, 20); --> with an added parameter
printf("%d", a);
return 0;
}
En las declaraciones de puntero, solo debe asignar la dirección de otras variables, por ejemplo, “&a”..
Desde el
change
la función no devuelve nada útil, debe declararlovoid
.– Barmar
29 de octubre de 2015 a las 1:52