Problema de asignación de punteros en lenguaje C
Preste atención a la inicialización cuando utilice punteros, por ejemplo:
int *p;
p es un puntero, la dirección es desconocida, si la asigna directamente
*p=a; La compilación puede realizarse de esta manera, pero se generará una advertencia. La dirección de p se asigna aleatoriamente, por lo que asignar valores a direcciones desconocidas es muy peligroso y puede sobrescribir algunos. datos importantes, así que evite este peligro al definir punteros, preste atención a la inicialización, es decir, la asignación.
Puedes usar int *p=&a;
o int *p;
p=&a;
y luego operar en p
Hay un error.
Presta atención a las mayúsculas, y
int a=9;
int *p;
p=&a;//this El puntero apunta a un
*p=8;
Así es.
Información ampliada:
Asignación de punteros
int *p;
int a;
int b [1];
p = &a;?
p = b;?
Asignación de puntero, el operando izquierdo de "=" puede ser *p , también puede ser p.
Cuando el operando izquierdo de "=" es *p, los datos almacenados en la dirección señalada por p cambian
Cuando el operando izquierdo de "=" es p; lo que cambia es la dirección que señala la p.
El nombre de la variable b de la matriz representa la primera dirección de la matriz, por lo que p=b también es correcto
Asignación de puntero del mismo tipo:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //Nota, p1 apunta a val2, no a val1
Observaciones: Inicialización y asignación de cadenas y punteros
Inicialización:
char *cp = "abcdefg"; //Este proceso de inicialización apunta el puntero cp a la primera dirección de la cadena en lugar de pasar el valor de la cadena. Porque, en lenguaje C, no existe un mecanismo general para procesar una cadena
Asignación:
cp = "abcdefg";
*cp="abcdefg" ;//¡error! A la constante de cadena se le pasa su primera dirección y el valor de la cadena no se puede cambiar mediante *cp, porque la cadena es una constante y simplemente apunta el puntero a la constante de cadena.