Parámetro que pasa en C – Punteros, direcciones, alias

¿Podría alguien explicar la diferencia entre el parámetro que pasa en C por favor? De acuerdo con las notas del profesor, hay 4 formas diferentes de pasar parámetros

  1. Llamada por valor
  2. Llamada por dirección (puntero)
  3. Llamada por alias
  4. Variable global / variable estática

Si pudiera dar un ejemplo, lo agradecería mucho, y su trabajo sería encomiable.

  1. Llamada por valor

    Pasar el valor a una función como parámetro. Si la función modifica la variable, la variable real no cambiará.

    void fun1(int myParam) { myParam = 4; } void main() { int myValue = 2; fun1(myValue); printf("myValue = %d",myValue); } 

    myValue siempre será 2.

  2. Llamada por dirección (puntero)

     void fun1(int *myParam) { *myParam = 4; } void main() { int myValue = 2; fun1(&myValue); printf("myValue = %d",myValue); } 

    Aquí estamos pasando la dirección de myValue a fun1 . Entonces el valor de myValue será 4 al final de main() .

  3. Llamada por alias

    No hay alias en C según mi entendimiento. Debería ser el mecanismo de referencia de C ++.

  4. Variable global / variable estática

    Las variables globales y estáticas son variables almacenadas en lugares comunes, accesibles por las funciones llamante y llamado. Por lo tanto, tanto la persona que llama como la llamada podrán acceder a ellos y modificarlos.

     int myValue = 2; void fun1() { myValue = 4; } void main() { myValue = 2 fun1(); printf("myValue = %d",myValue); } 

    Como puede adivinar, el valor de myValue será 4 al final de main() .

Espero eso ayude.

C pasa todos los parámetros de función por valor, punto; el parámetro formal (en la definición) es un objeto separado en la memoria del parámetro real (en la llamada). Cualquier actualización del parámetro formal no tiene ningún efecto en el parámetro real. Puede simular la semántica de paso por referencia utilizando un puntero, pero el puntero se pasa por valor.

El verdadero paso por referencia significa que los parámetros formales y reales se refieren al mismo objeto en la memoria, por lo que cualquier cambio en el parámetro formal también afecta al parámetro real. En la práctica, un objeto similar a un puntero se pasa a la subrutina, pero está oculto para el progtwigdor.

C no admite pass-by-reference. C ++ admite referencia por pasaje con operadores especiales. La vieja escuela de Fortran fue pasada por referencia.

Las variables globales son simplemente visibles tanto para la persona que llama como para el destinatario.

No puedo hablar con pass-by-name o pass-by-alias; nunca funcionó con un lenguaje que usara ese mecanismo.