Parámetros de entrada/salida

El lenguaje C no dispone de parámetros de entrada y salida. La forma de simular estos parámetros es la siguiente: el parámetro se define como un puntero al tipo de la variable de entrada/salida y en la llamada a la función se pasa la dirección de la variable que se desea modificar; internamente, mediante el puntero, se accede y modifica el dato externo.
Ejemplos de uso de un puntero como parámetro de entrada/salida se encuentran en el procedimiento extrae de operadores de acceso a struct y union y en la función inserta de typedef.

Ejemplo

El procedimiento spmatriz que calcula la suma y el producto de los elementos almacenados en una matriz de enteros. Para obtener estos dos datos se pasan como parámetros dos punteros a enteros.

#include <stdio.h>
void spmatriz(int m[][10], int n, int *s, int *p) { /* s y p son parámetros de entrada/salida */
   int i, j;
   *s=0;*p=1;                                        /* Se modifican r1 y r2 */
   for(i=0;i<n;i++)
      for(j=0;j<10;j++){
         *s += m[i][j];                              /* Se modifican r1 */
         *p *= m[i][j];                              /* Se modifican r2 */
      }
}
void usa(void){
   int m1[3][10], m2[5][10];
   int r1, r2;
   ...                     /* Se leen los elementos de las matrices m1 y m2 */
   spmatriz(m1,3,&r1,&r2); /* Se invoca al procedimiento spMatriz pasándole la dirección de r1 y r2 */
   printf("La suma de los elementos de m1 es %i y el producto es %i\n", r1, r2);
   spmatriz(m2,4,&r1,&r2); /* Se invoca al procedimiento spMatriz pasándole la dirección de r1 y r2 */
   printf("La suma de los elementos de las 4 primeras filas de m2 es %i y el producto es %i\n", r1, r2);
}