¿Cómo pasar una array por valor en C?

En C, el nombre de la array representa la dirección y cuando pasamos una array, en realidad pasamos la dirección y la función de recepción de parámetros siempre los acepta como punteros (incluso si usamos [], consulte esto para obtener más detalles).

¿Cómo pasar una array por valor, es decir, cómo asegurarnos de que tenemos una nueva copia de la array cuando la pasamos a la función?
Esto se puede hacer envolviendo la array en una estructura y creando una variable del tipo de esa estructura y asignando valores a esa array. Después de eso, pasar la variable a alguna otra función y modificarla según los requisitos. Tenga en cuenta que los miembros de la array se copian cuando se pasan como parámetro, pero las arrays dinámicas no . Entonces, esta solución solo funciona para arrays no dinámicas (creadas sin new o malloc).

Veamos un ejemplo para demostrar el hecho anterior usando un programa C:

// C program to demonstrate passing an array
// by value using structures.
#include<stdio.h>
#include<stdlib.h>
  
# define SIZE 5
  
// A wrapper for array to make sure that array
// is passed by value.
struct ArrayWrapper
{
    int arr[SIZE];
};
  
// An array is passed by value wrapped in temp
void modify(struct ArrayWrapper temp)
{
    int *ptr = temp.arr;
    int i;
  
    // Display array contents
    printf("In 'modify()', before modification\n");
    for (i = 0; i < SIZE; ++i)
        printf("%d ", ptr[i]);
  
    printf("\n");
  
    // Modify the array
    for (i = 0; i < SIZE; ++i)
        ptr[i] = 100; // OR *(ptr + i)
  
    printf("\nIn 'modify()', after modification\n");
    for (i = 0; i < SIZE; ++i)
        printf("%d ", ptr[i]); // OR *(ptr + i)
}
  
// Driver code
int main()
{
    int i;
    struct ArrayWrapper obj;
    for (i=0; i<SIZE; i++)
        obj.arr[i] = 10;
  
    modify(obj);
  
    // Display array contents
    printf("\n\nIn 'Main', after calling modify() \n");
    for (i = 0; i < SIZE; ++i)
        printf("%d ", obj.arr[i]); // Not changed
  
    printf("\n");
  
    return 0;
}

Producción:

In 'modify()', before modification
10 10 10 10 10 

In 'modify()', after modification
100 100 100 100 100 

In 'Main', after calling modify() 
10 10 10 10 10 

Referencia:

http://stackoverflow.com/questions/11158858/c-pass-array-by-value

Este artículo es una contribución de MAZHAR IMAM KHAN . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *