"C ++ Primer" lectura de notas-Capítulo 02 paso de parámetros

Autor: Ma Zhifeng
Enlace: https: //zhuanlan.zhihu.com/p/23726515
Fuente: saber casi con
derechos de autor del autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización. Para reimpresiones no comerciales, indique la fuente.

declaración:

  • El contenido del artículo se recopila y compila de "C ++ Primer Chinese Edition (5th Edition)", y los derechos de autor pertenecen al libro original.

  • El libro original tiene interpretaciones más detalladas y maravillosas, compre libros genuinos para aprender.

  • Este artículo es solo para aprendizaje y comunicación, cualquier forma de reimpresión está prohibida.

El mecanismo de inicialización de parámetros formales es el mismo que el de inicialización de variables.

Pasar por valor y pasar por referencia

  • Si el parámetro formal es un tipo de referencia, estará vinculado al parámetro real correspondiente

  • De lo contrario, copie el valor del parámetro real y asígnelo al parámetro formal

El puntero también sigue las reglas anteriores. Al llamar a la función, el valor del parámetro del puntero se copia y se asigna al parámetro del puntero. Son dos punteros, pero apuntan al mismo objeto.

Pasar por referencia puede evitar la copia de objetos, por lo que se recomienda utilizar pasar por referencia tanto como sea posible

Si no necesita cambiar el valor del parámetro de referencia, es mejor usar una referencia constante, que puede aceptar más tipos de argumentos que las referencias ordinarias.

  • Las referencias ordinarias solo aceptan objetos del mismo tipo que los valores iniciales

  • Las referencias constantes se pueden inicializar con objetos del mismo tipo, expresiones y literales

Si la función requiere varios valores de retorno, puede utilizar parámetros de referencia para devolver información adicional.

parámetros const y parámetros reales

void fcn( const int i);  

void fcn( int i );

No constituye una sobrecarga de funciones, porque al igual que otros procedimientos de inicialización, se ignora la constante de nivel superior de los parámetros formales. En otras palabras, el parámetro real puede ser constante o no constante.

Parámetro de matriz

Las matrices tienen dos propiedades especiales

  • No admite copia

  • Los nombres de las matrices generalmente se convierten automáticamente en punteros

También hace que los parámetros de la matriz sean especiales

void print( const int* );  

void print( const int[] );  

void print( const int[10] );

Subjetivamente, pensaríamos que estas tres son definiciones diferentes, pero las dos últimas también se convertirán automáticamente a const int * para su procesamiento.

En la llamada, el parámetro real puede ser un nombre de matriz o un puntero entero

Debido a que los parámetros formales son solo punteros enteros, las dimensiones de la matriz no se pasan a la función. Hay tres formas de resolver este problema.

  • Pase el puntero del primer elemento y el último elemento

  • Agregue un parámetro para pasar el tamaño de la matriz

  • Usar parámetros de referencia de matriz

Parámetro de referencia de matriz

void print(int (&arr)[10] );

Sin embargo, esta definición también nos limita a solo pasar matrices de dimensión 10.

Matrices multidimensionales

Como se mencionó anteriormente, una matriz multidimensional es en realidad una matriz de matrices, y el primer elemento es un puntero a la matriz.

void print(int matrix[10][10], int rowSize);

¿Por qué pasar rowSize?

Sabemos que las matrices se convierten automáticamente en punteros, y esta no es una excepción. La esencia de la definición anterior es

void print(int (*matrix)[10], int rowSize);

Por lo tanto, rowSize es necesario para especificar la primera dimensión de la matriz bidimensional.

Los parámetros formales de la función principal

La función principal es el mejor ejemplo de familiaridad con los parámetros de la matriz.

int main(int argc, char *argv[]) {}

El segundo parámetro se declara como una matriz de char *, lo que significa que podemos pasar varias cadenas, y el número específico lo especifica argc

También se puede definir como

int main( int argc, char **argv ) {}

Supongo que te gusta

Origin blog.csdn.net/qq_26751117/article/details/53233451
Recomendado
Clasificación