Monday, March 31, 2014

some basic c syntax

1) static array
#include "stdio.h"

int main(int argc, char* argv[]) {
    int a[] = {1, 2, 3, 4, 5, 6, 7};
    int b[7] = {1, 2, 3, 4, 5, 6, 7};
    int c[7];
    int i;
    int size;

    size = sizeof(a) / sizeof(*a);
    for(i=0; i<size; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");

    size = sizeof(b) / sizeof(*b);
    for(i=0; i<size; i++) {
        printf("%d ", b[i]);
    }
    printf("\n");

    size = sizeof(c) / sizeof(*c);
    for(i=0; i<size; i++) {
        *(c+i) = i + 1;
    }
    for(i=0; i<size; i++) {
        printf("%d ", *(c+i));
    }
    printf("\n");

    return 0;
}

2) dynamic array
#include "stdlib.h"
#include "stdio.h"

int main(int argc, char* argv[]) {
    int size = 7;
    int *a = (int*) malloc(size * sizeof(int));
    int *b = malloc(size * sizeof(int));
    int i;

    if(a == NULL || b == NULL) {
        exit(1);
    }

    for(i=0; i<size; i++) {
        *(a+i) = i + 1;
        b[i] = i + 1;
    }

    for(i=0; i<size; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");

    for(i=0; i<size; i++) {
        printf("%d ", b[i]);
    }
    printf("\n");

    free(a);

    return 0;
}

3) function pointer
#include <iostream>
#include <stdlib.h>

using std::cout;
using std::endl;

typedef struct struct_student_information {
    int id;
    int height;
    int weight;
} struct_stud_info;

void sort_by_height(struct_stud_info* data, int& data_no) {
    struct_stud_info data_tmp;
    for(int i=0; i<data_no; i++) {
for(int j=0; j<data_no-1; j++) {
if(data[j].height > data[j+1].height) {
                data_tmp = data[j];
data[j] = data[j+1];
                data[j+1] = data_tmp;
            }
        }
    }
}

void sort_by_weight(struct_stud_info* data, int& data_no) {
    struct_stud_info data_tmp;
    for(int i=0; i<data_no; i++) {
for(int j=0; j<data_no-1; j++) {
if(data[j].weight > data[j+1].weight) {
                data_tmp = data[j];
data[j] = data[j+1];
                data[j+1] = data_tmp;
            }
        }
    }
}

int main(int argc, char* argv[]) {
    int data_no = 7;
    struct_stud_info stud_info[7];

    for(int i=0; i<7; i++) {
        stud_info[i].id = i + 1;
        stud_info[i].height = rand() % 100;
        stud_info[i].weight = rand() % 100;
    }

    void (*sort_func)(struct_stud_info*, int&);

    sort_func = &sort_by_height;
    sort_func(stud_info, data_no);
    for(int i=0; i<data_no; i++) {
        cout << "id: " << stud_info[i].id << " height: " << stud_info[i].height << " weight: " << stud_info[i].weight << endl;
    }
    cout << endl;

    sort_func = &sort_by_weight;
    sort_func(stud_info, data_no);
    for(int i=0; i<data_no; i++) {
        cout << "id: " << stud_info[i].id << " height: " << stud_info[i].height << " weight: " << stud_info[i].weight << endl;
    }

    return 0;
}

4) static 2D array
#include "stdio.h"

void print_data(int *data, int row, int col) {
    int i;
    int j;

    for(i=0; i<row; i++) {
        for(j=0; j<col; j++) {
            printf("%d ", *(data + i*col + j));
        }
    }
    printf("\n");
}

void print_data1(int (*data)[4], int data_row) {
    int i;
    int j;

    for(i=0; i<data_row; i++) {
        for(j=0; j<4; j++) {
            printf("%d ", *(*(data+i)+j));
        }
    }
    printf("\n");
}

int main() {
    int data[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
    int row = sizeof(data) / sizeof(*data);
    int col = sizeof(*data) / sizeof(**data);
    int *data_ptr = &(**data);

    print_data(data_ptr, row, col);
    print_data1(data, row);

    return 0;
}

5) dynamic 2D array
#include "stdio.h"
#include "stdlib.h"

void print_data2(int **data, int row, int col) {
    int i;
    int j;

    for(i=0; i<row; i++) {
        for(j=0; j<col; j++) {
            printf("%d ", *(*(data+i)+j));
        }
    }
    printf("\n");
}

void print_data3(int ***data, int row, int col) {
    int i;
    int j;

    for(i=0; i<row; i++) {
        for(j=0; j<col; j++) {
            printf("%d ", *(*(*data+i)+j));
        }
    }
    printf("\n");
}

int main() {
    int row = 3;
    int col = 4;
    int **data2;
    int ***data3;
    int i;
    int j;

    //data2 -> |array0_addr0|array0_addr1|...|
    //array0_addr0 -> |arrary1_addr0|array1_addr1|...|
    //array0_addr1 -> |arrary2_addr0|array2_addr1|...|
    data2 = (int**)malloc(row*sizeof(int*));
    for(i=0; i<row; i++) {
        *(data2+i) = malloc(col*sizeof(int));
        //data2[i] = malloc(col*sizeof(int));
    }

    //data3        -> *data3
    //*data3       -> |array0_addr0|array0_addr1|...|
    //array0_addr0 -> |arrary1_addr0|array1_addr1|...|
    //array0_addr1 -> |arrary2_addr0|array2_addr1|...|
    *data3 = (int**)malloc(row*sizeof(int*));
    for(i=0;i<row;i++) {
        //*((*data3)+i) = malloc(col*sizeof(int));
        (*data3)[i] = malloc(col*sizeof(int));
    }

    for(i=0; i<row; i++) {
        for(j=0; j<col; j++) {
            *(*(data2+i)+j) = i*col + j;
        }
    }

    for(i=0; i<row; i++) {
        for(j=0; j<col; j++) {
            *(*(*data3+i)+j) = i*col + j;
        }
    }

    print_data2(data2, row, col);
    print_data3(data3, row, col);

    return 0;
}

No comments:

Post a Comment