¿Cómo pasar una array 2D como parámetro en C?

Esta publicación es una extensión de ¿Cómo asignar dinámicamente una array 2D en C?  Una array unidimensional se puede pasar fácilmente como un puntero, pero la sintaxis para pasar una array 2D a una función puede ser difícil de recordar. Una cosa importante para pasar arreglos multidimensionales es que no es necesario especificar la primera … Continue reading «¿Cómo pasar una array 2D como parámetro en C?»

Función C para intercambiar strings

Consideremos el siguiente programa.   C #include<stdio.h> void swap(char *str1, char *str2) { char *temp = str1; str1 = str2; str2 = temp; }   int main() { char *str1 = «geeks»; char *str2 = «forgeeks»; swap(str1, str2); printf(«str1 is %s, str2 is %s», str1, str2); getchar(); return 0; } La salida del programa es … Continue reading «Función C para intercambiar strings»

Inicialización de arreglos multidimensionales en C/C++

En C/C++, la inicialización de arrays multidimensionales puede haber dejado la mayoría de las dimensiones como opcionales. Excepto la dimensión más a la izquierda, se deben especificar todas las demás dimensiones. Por ejemplo, el siguiente programa falla en la compilación porque no se especifican dos dimensiones.   C #include<stdio.h> int main() {   int a[][][2] = { {{1, … Continue reading «Inicialización de arreglos multidimensionales en C/C++»

No use sizeof para parámetros de array en C

Usar sizeof directamente para encontrar el tamaño de las arrays puede generar un error en el código, ya que los parámetros de la array se tratan como punteros. Considere el siguiente programa.   C // C Program to demonstrate incorrect usage of sizeof() for // arrays #include <stdio.h>   void fun(int arr[]) {     int i;   … Continue reading «No use sizeof para parámetros de array en C»

¿Se copian profundamente los miembros de la array?

En C/C++, podemos asignar una variable de estructura (o clase solo en C++) a otra variable del mismo tipo. Cuando asignamos una variable de estructura a otra, todos los miembros de la variable se copian a la otra variable de estructura. Pero, ¿qué sucede cuando la estructura contiene un puntero a la memoria asignada dinámicamente … Continue reading «¿Se copian profundamente los miembros de la array?»

gets() es arriesgado de usar!

Considere el siguiente programa.  C void read() {    char str[20];    gets(str);    printf(«%s», str);    return; } El código parece simple, lee la string de la entrada estándar e imprime la string ingresada, pero sufre un desbordamiento de búfer ya que gets() no realiza ninguna prueba de límite de array. gets() sigue leyendo hasta que ve un … Continue reading «gets() es arriesgado de usar!»

¿Cómo asignar dinámicamente una array 2D en C?

  Las siguientes son diferentes formas de crear una array 2D en el montón (o asignar dinámicamente una array 2D). En los siguientes ejemplos, hemos considerado ‘ r ‘ como número de filas, ‘ c ‘ como número de columnas y creamos una array 2D con r = 3, c = 4 y los siguientes … Continue reading «¿Cómo asignar dinámicamente una array 2D en C?»

Almacenamiento para strings en C

En C, se puede hacer referencia a una string mediante un puntero de carácter o como una array de caracteres. Strings como arrays de caracteres   C char str[4] = «GfG»; /*One extra for string terminator*/ /*    OR    */ char str[4] = {‘G’, ‘f’, ‘G’, ‘\0’}; /* ‘\0’ is string terminator */ Cuando las strings se declaran … Continue reading «Almacenamiento para strings en C»

¿Diferencia entre puntero y array en C?

  Los punteros se utilizan para almacenar direcciones de arrays asignadas dinámicamente y para arrays que se pasan como argumentos a funciones. En otros contextos, las arrays y el puntero son dos cosas diferentes, consulte los siguientes programas para justificar esta afirmación. Comportamiento del operador sizeof  C++ // 1st program to show that array and pointers … Continue reading «¿Diferencia entre puntero y array en C?»