01 - Lenguaje C para especialistas en C++

Diferencias importantes entre C y C++

Standard input and output

Ejemplo en C++

#include <iostream>
using namespace std;
int main() {
  int a = 50;
  cin >> a;
  cout << "The integer value of a is " << a << endl;
  return 0;
}

Su equivalente en C

#include <stdio.h>
int main() {
  int a = 50;
  scanf("%d", &a);
  printf("The integer value of a is %d \n",a);
  return 0;
}

Command Line Arguments

Igual en C que en C++ pero vale la pena repasar...

#include <stdio.h>
int main(int argc, char** argv) {
    printf("Received %d arguments\n",argc);
    for (int i = 0; i < argc; i++)
        printf("%s\n",argv[i]);

    return 0;
}

new/delete : malloc/free

Ejemplo arreglo dinámico en C++

#include <stdio.h>
int main(int argc, char** argv) {
    int *a;
    a = new int[10];
    for (int i = 0; i < 10; i++) a[i] = rand()%100;

    for (int i = 0; i < 10; i++)
        printf("%d\n",a[i]);

    delete [] a;
    return 0;
}

Equivalente en C.

#include <stdio.h>
int main(int argc, char** argv) {
    int *a;
    a = (int *)malloc(10*sizeof(int));
    for (int i = 0; i < 10; i++) a[i] = rand()%100;

    for (int i = 0; i < 10; i++)
        printf("%d\n",a[i]);

    free(a);
    return 0;
}

Los strings son arreglos de chars

No son objetos y por lo tanto se manipulan usando funciones que reciben strings como argumentos: strlen, strcpy, strcat.

#include <stdio.h>
int main(int argc, char** argv) {
    char st0[100],st1[100], *st2, *st3;
    printf("Entre nombre:");
    scanf("%s", st0);
    printf("Entre apellido:");
    scanf("%s", st1);

    st2 = malloc(strlen(st0) + strlen(st1) + 2 );

    strcpy(st2, st0);
    strcat(st2, st1);
    printf("%s\n",st2);

    st3 = malloc(strlen(st0) + strlen(st1) + 2 );
    sprintf(st3, "%s %s", st0, st1);
    printf("%s\n",st3);


    return 0;
}

Operaciones bitwise (igual que en C++)

&, |, ^, <<, >>, ~

Ejemplo de geeks4geeks...

#include <stdio.h>
int main()
{
    // a = 5(00000101), b = 9(00001001)
    unsigned char a = 5, b = 9;

    // The result is 00000001
    printf("a&b = %d\n", a & b);

    // The result is 00001101
    printf("a|b = %d\n", a | b);

    // The result is 00001100
    printf("a^b = %d\n", a ^ b);

    // The result is 11111010
    printf("~a = %d\n", a = ~a);

    // The result is 00100100
    printf("b<<2 = %d\n", b << 1);

    // The result is 00000100
    printf("b>>1 = %d\n", b >> 1);

    return 0;

}