Quick actions

cmd+k|ctrl+k

Navigation

Languages

Aula Ponteiros

Snippet info

Language

C

Visibility

public

Author

john.gardenghi

Created

2019-04-06T01:59:49Z

Updated

2019-04-06T04:13:20Z

#include <stdio.h>

void imprimeTamanho() {
    int array[20];
    char string[20];

    printf( "TAMANHOS:\n"
	        "\t char.........: %ld\n"
	        "\t short........: %ld\n"
            "\t int..........: %ld\n"
	        "\t long.........: %ld\n"
	        "\t float........: %ld\n"
	        "\t double.......: %ld\n"
	        "\t long double..: %ld\n"
	        "\t vetor int....: %ld\n"
	        "\t string.......: %ld\n\n",
	        sizeof(char), sizeof(short), sizeof(int), sizeof(long),
	        sizeof(float), sizeof(double), sizeof(long double),
	        sizeof(array), sizeof(string) );
}

void imprimeEndereco() {
    int i = 5;
    printf( "Endereço de i: %ld\n", (long int) &i );
    printf( "Endereço de i: %p\n\n", (void *) &i );
}

void declaraPtr() {
    int i; int *p;
    i = 1234; p = &i;
    printf ("*p = %d\n", *p);
    printf (" p = %ld\n", (long int) p);
    printf (" p = %p\n", (void *) p);
    printf ("&p = %p\n\n", (void *) &p);
}

void troca (int *i, int *j) {
    int temp;
    temp = *i; *i = *j; *j = temp;
}

void forcaBarra() {
    int var;
    char *ptr;
    
    ptr = &var;
    
    ptr[0] = 'a';
    ptr[1] = 'm';
    ptr[2] = 'o';
    ptr[3] = '\0';
    
    // var = var + 1;
    
    printf( "Olha a forcada de barra: %s.... var = %d\n\n", (char *) ptr, var);
}

void ex1() {
        int arr[] = { 9, 8, 98, 88, 87, 1, 2, 4, 101, 102, 103, 105 };
        int *x =  arr+4;
        int *ptr = &arr[7];
        
        arr[*ptr]++;
        printf( "First value: %d\n", *ptr); // 4
        printf( "Second value: %d\n", *x); // 87
        *x = 7;
        printf( "Third value: %d\n\n", arr[4] + *ptr); // 11
}

void percorreVetor() {
    int b[] = { 10, 20, 30, 40 };
    int *bPtr = b;
    int i, offset;

    printf( "VETOR\n" );

    printf( "\n\tNotacao usando indices:\n" );
    for ( i = 0; i < 4; i++ ) {
        printf( "\t\tb[%d] = %d\n", i, b[i] );
    }

    printf( "\n\tNotacao usando deslocamento\n" );
    for ( offset = 0; offset < 4; offset++ ) {
        printf( "\t\t*(b + %d) = %d\n", offset, *(b + offset) );
    }

    printf( "\nPONTEIRO\n" );

    printf( "\n\tNotacao usando indices:\n" );
    for ( i = 0; i < 4; i++ ) {
        printf( "\t\tbPtr[%d] = %d\n", i, bPtr[i] );
    }
    
    printf( "\n\tNotacao usando deslocamento\n" );
    for ( offset = 0; offset < 4; offset++ ) {
        printf( "\t\t*(bPtr + %d) = %d\n", offset, *(bPtr + offset) );
    }
    
    printf( "\n" );
}

int main() {
    int a = 2, b = 3;

    ex1();
    
    percorreVetor();

    forcaBarra();
    
    imprimeTamanho();
    imprimeEndereco();
    declaraPtr();
    
    troca( &a, &b );
    printf( "a = %d, b = %d\n\n", a, b );
    
    return 0;
}
INFO