¿Es un puntero una dirección? ¿No es una variable de puntero una dirección?
Un puntero es una dirección y una dirección es un puntero; una variable de puntero es una variable que almacena la dirección de una variable de tipo básico.
Si la variable puntero p almacena la dirección de la variable a, entonces se dice que p apunta a a, y *p es la variable a.
Si p es una variable puntero, *p representa la variable cuya dirección es el contenido de p, que es la variable apuntada por p.
Los punteros se pueden entender de esta manera: los punteros son un mecanismo de lenguaje especial que almacena las direcciones de otras variables, y el contenido de la dirección se puede obtener a través del operador de desreferencia *. Esto también crea una relación de señalización.
Derivación del tipo de cada variable, foo_p es un puntero y apunta a int, por lo que el tipo de foo_p es int*, es decir, int se agrega antes de '*' también es un puntero y apunta a; foo_p, entonces foo_pp's El tipo es int **, es decir, agregue int * antes de '*'.
Información ampliada
Inicialización de variables de puntero:
Puedes utilizar una sentencia de asignación para obtener la dirección de una variable de puntero de otra variable, de modo que apunte a esa variable. Por ejemplo:
int i, *j;j = &i;
De esta manera, la dirección de la variable i se coloca en la variable puntero j A través de la dirección de i. j puede encontrar i Los datos en, por lo que j "apunta" a la variable i. Entre ellos, & es el "operador de dirección", que es el mismo concepto que & en scanf; * es el "operador de puntero", y su función es obtener el contenido de la variable a la que apunta la dirección de la variable almacenada internamente.
Debido a que j se define como una variable de puntero, j solo puede almacenar la dirección de la variable, por lo que la variable i debe estar precedida por &. Cabe señalar que solo se pueden almacenar direcciones en variables de puntero. No asigne un número entero ni ningún otro dato que no sea de dirección a una variable de puntero.
Además, hay dos puntos a tener en cuenta:
1.j no es i y i no es j. Modificar el valor de j no afectará el valor de i, y modificar el valor de i no afectará el valor de j. j es la dirección de la variable i, e i son los datos de la variable i. Una es la "dirección de la unidad de memoria" y la otra es el "contenido de la unidad de memoria".
2. El significado de "*j" al definir variables de puntero es diferente del "*j" utilizado en el programa. El "*j" al definir una variable de puntero es solo una declaración. El "*" en este momento solo indica que la variable es una variable de puntero y no tiene otro significado.
Y la variable de puntero no apunta a ninguna variable en este momento. En cuanto a a qué variable apunta, debe especificarse en el programa, es decir, la variable de puntero se inicializa. Cuando se especifica j para que apunte a la variable i, *j es completamente equivalente a i y se pueden reemplazar entre sí.