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