Red de conocimientos sobre prescripción popular - Como perder peso - c Los principiantes no pueden entender los símbolos del puntero * y ¿cómo usarlos? ¿No es amp una referencia? No entiendo bien el programa, explícalo en detalle, ¡gracias!

c Los principiantes no pueden entender los símbolos del puntero * y ¿cómo usarlos? ¿No es amp una referencia? No entiendo bien el programa, explícalo en detalle, ¡gracias!

1) Las referencias deben inicializarse, no se requieren punteros.

2) La referencia no se puede cambiar después de la inicialización, pero el puntero puede cambiar el objeto al que apunta.

2) No hay ninguna referencia al valor nulo, pero hay un puntero al valor nulo.

Los punteros y las referencias de C se ven completamente diferentes (los punteros usan los operadores ' * ' y '-->;, las referencias usan el operador " ".), pero su funcionalidad parece ser la misma. Tanto los punteros C como las referencias le permiten hacer referencia indirecta a otros objetos. ¿Cómo decidir cuándo utilizar punteros y cuándo utilizar referencias?

Primero, tenga en cuenta que no puede utilizar referencias nulas bajo ninguna circunstancia. Las referencias siempre deben apuntar a algún objeto. Entonces, si usa una variable y la apunta a un objeto, pero es posible que esta variable no apunte a ningún objeto en algún momento, debe declarar la variable como un puntero, porque entonces puede asignar un valor nulo a la variable. Por el contrario, si la variable apunta explícitamente a un objeto, por ejemplo, su diseño no permite que la variable sea nula, entonces puede declarar la variable como referencia.

"Pero por favor espera un momento", preguntaste confundido. "¿Qué pasaría con un código como este?"

char * PC = 0; // Establecer el puntero en nulo char = * pc // Dejar que la referencia apunte a un valor nulo es perjudicial, no. duda . Los resultados no estarán especificados (el compilador puede producir algún resultado, por lo que puede suceder cualquier cosa), y se debe evitar que las personas escriban dicho código a menos que acepten corregir el error. Si le preocupa que un código como este aparezca en su software, será mejor que evite el uso de referencias por completo o deje que lo haga un mejor programador. Ignoraremos la posibilidad de que la referencia apunte a un valor nulo en el futuro.

Debido a que la referencia definitivamente apuntará a un objeto, en C, la referencia debe inicializarse.

Cuerdas y hilos. RS; //Error, la referencia debe inicializarse en cadena s("xyzzy"); RS = s; //Correcto, rs apunta a s.

Los punteros no tienen tal restricción.

cadena * ps//Puntero no inicializado//Legal pero peligroso

El hecho de que no haya referencia al valor nulo significa que el código que usa referencias es más eficiente que el código que usa punteros. Porque no es necesario comprobar la validez de una referencia antes de utilizarla.

void printDouble(constant double amprd){ cout lt; //No es necesario probar rd,}//debe apuntar a un valor doble.

En su lugar, siempre debes probar los punteros para evitar que sean nulos:

void print double(const double * PD){ if(PD){ //Comprueba si hay cout nulo

p>

C Otra diferencia importante entre punteros y referencias es que los punteros se pueden reasignar para apuntar a diferentes objetos. Sin embargo, la referencia siempre apunta al objeto especificado en el momento de la inicialización y no se puede cambiar más adelante.

Cadena s 1(" Nancy "); cadena S2("Clancy"); RS = s 1; // RS hace referencia a s 1 cadena * PS = ; s 1; // ps apunta a s 1 RS = S2; // rs todavía se refiere a s1, // pero el valor de s1 ahora es // " Clancy" PS = ; S2; // ps ahora apunta a S2; // s1 no ha cambiado.

En términos generales, debes utilizar punteros en las siguientes situaciones: en primer lugar, consideras la posibilidad de no apuntar a ningún objeto (en este caso, puedes establecer el puntero en nulo); posibilidad de no apuntar a ningún objeto (en este caso, puede establecer el puntero en nulo, debe poder apuntar a diferentes objetos en diferentes momentos (en cuyo caso puede cambiar la dirección del puntero);

Si siempre apunta a un objeto y una vez que señala un objeto nunca cambia el punto, entonces debe usar una referencia.

Otra situación es cuando se sobrecarga un operador, se debe utilizar una referencia. El ejemplo más común es el operador []. Un uso típico de este operador es devolver un objeto de destino al que se le puede asignar un valor.

Vector v(10); //Crea un vector entero de tamaño 10; //El vector es la plantilla v[5]= 10 en la biblioteca C estándar; el operador []El valor devuelto. Si operador[] devuelve un puntero, la siguiente declaración debe escribirse así:

* v[5]= 10 pero esto hará que v parezca un puntero vectorial. Por lo tanto, elegiría que el operador le devuelva una referencia.

No debes utilizar punteros cuando sabes que debes apuntar a un objeto y no quieres cambiar su puntero, o cuando sobrecargas operadores para evitar malentendidos semánticos innecesarios. En otros casos, se deben utilizar punteros.