GMgKe586q6suSQnyqZLlGCooeWM

Pages

Search

Showing posts with label C. Show all posts
Showing posts with label C. Show all posts

Monday, May 30, 2011

Function Pointer As Struct Member

Function pointer as struct member - with arguments:

#include <stdio.h>

struct aritmathic{
    int a;
    int b;
    int (*add)(int, int);
    int (*subtract)(int, int);
    int (*multiply)(int, int);
};

int Add(int a, int b){
    return (a+b);
}

int Subtract(int a, int b){
    return (a-b);
}

int Multiply(int a, int b){
    return (a*b);
}

int main(){

    struct aritmathic ar;
    ar.a = 4;
    ar.b = 5;

    ar.add = Add;
    ar.subtract = Subtract;
    ar.multiply = Multiply;

    int a = ar.add(ar.a, ar.b);
    int b = ar.subtract(ar.a, ar.b);
    int c = ar.multiply(ar.a, ar.b);   

    printf("%d\n%d\n%d", a, b, c);

    return 0;
}


Simpler version for above:
#include <stdio.h>

struct aritmathic{
    int a;
    int b;
    int (*add) (struct aritmathic*);
    int (*subtract) (struct aritmathic*);
    int (*multiply) (struct aritmathic*);
};

int Add(struct aritmathic* ar){
    return (ar->a + ar->b);
}

int Subtract(struct aritmathic* ar){
    return (ar->a - ar->b);
}

int Multiply(struct aritmathic* ar){
    return (ar->a * ar->b);
}

int main(){

    struct aritmathic ar;
    ar.a = 4;
    ar.b = 5;

    ar.add = Add;
    ar.subtract = Subtract;
    ar.multiply = Multiply;

    int a = ar.add(&ar);
    int b = ar.subtract(&ar);
    int c = ar.multiply(&ar);   

    printf("%d\n%d\n%d", a, b, c);

    return 0;
}

Share/Bookmark
Below is a simple example of function pointer as a member of struct:

#include <stdio.h>

struct data{
    void(*hello)();
};

void hello(){
    puts("Hello comes from C");
}

int main(){
    // the first way
    struct data d;
    d.hello = hello;
    d.hello();

    // the alternate way
    struct data dd;
    struct data* ptr = &dd;
    ptr->hello = *hello;
    ptr->hello();
  
    return 0;
}

Share/Bookmark

Wednesday, May 4, 2011

C - Define

#define MODULE_AUTHOR(auth) printf("Author: %s\n",auth)
#define MODULE_DESCRIPTION(desc) printf("Description: %s\n", desc)

MODULE_AUTHOR("Irfanudin Ridho");
MODULE_DESCRIPTION("File System");

Share/Bookmark

Tuesday, May 3, 2011

C - String Memory Handling

1. memcpy
char name[] = "lady gaga and barack obama";
char data[100];
memcpy(data, name, strlen(name)+1);
puts(data);

2. memset
char name[] = "lady gaga";
memset(name, '*', 5);
puts(name);

3. memmove
char name[] = "lady gaga and luna maya";
memmove(name+0, name+5, 4); // placed, starting, num
puts(name);
Share/Bookmark

C - Iterate Pointer Of Char

To iterate a pointer of char, it's just need like doing with custom looping
char *data = "lady gaga";
for(; *data!='\0'; data++){
    putchar(*data);
}

Or using this one:
while(*data != '\0'){
    putchar(*data);
    data++;
}
Share/Bookmark

C - Malloc And Calloc

When we use malloc? We use it when we have a pointer, and we want to initialize it.
char name[] = "lady gaga";
char *ptr;
ptr = (char*) malloc(sizeof(name) * sizeof(char))

And then it's okey to initialize it through assignment or strcpy
ptr = name;
or 
strcpy(ptr, name);

Calloc is same as malloc:
ptr = (char*) calloc(sizeof(name), sizeof(char))

When you need copy an array of char to an array of char, the one way is use strcpy function
char name[] = "Indonesia";
char data[100];
strcpy(data, name);

Share/Bookmark

Thursday, April 28, 2011

C - Default Function

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char *name;
    char *city;
    int age;
}data;

int addName(data *d){
    d->name = "lady gaga";

    return 0;
}

int addCity(data *d){
    d->city = "new york";

    return 0;
}

int addAge(data *d){
    d->age = 24;

    return 0;
}

int set_default(data *d){

    addName(d);
    addCity(d);
    addAge(d);

    return 0;
}

char* getName(data *d){
    return d->name;
}

char* getCity(data* d){
    return d->city;
}

int getAge(data* d){
    return d->age;
}

int changeName(data* d, const char* name){
    d->name = (char *)malloc(1*sizeof(char));
    strcpy(d->name, name);

    return 0;
}

int changeCity(data* d, const char* city){
    d->city = (char *) malloc(1*sizeof(char));
    strcpy(d->city, city);

    return 0;
}

int changeAge(data* d, int age){
    d->age = age;

    return 0;
}

int main(int c){
    system("color 5f");

    data* list;
    list = (data*) malloc(10*sizeof(data));

    set_default(list);



    printf("%s, %d of %s",getName(list), getAge(list), getCity(list));

    return 0;
}

Share/Bookmark

C - Member Using DMA

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char *name;
    char *city;
    int age;
}data;

int addName(data *d){
    d->name = "lady gaga";

    return 0;
}

int addCity(data *d){
    d->city = "new york";

    return 0;
}

int addAge(data *d){
    d->age = 24;

    return 0;
}

char* getName(data *d){
    return d->name;
}

char* getCity(data* d){
    return d->city;
}
int getAge(data* d){
    return d->age;
}

int changeName(data* d, const char* name){
    d->name = (char *)malloc(1*sizeof(char));
    strcpy(d->name, name);

    return 0;
}

int changeCity(data* d, const char* city){
    d->city = (char *) malloc(1*sizeof(char));
    strcpy(d->city, city);

    return 0;
}

int changeAge(data* d, int age){
    d->age = age;

    return 0;
}

int main(int c){
    system("color 5f");

    data* list;
    list = (data*) malloc(10*sizeof(data));

    addName(list);
    addCity(list);
    addAge(list);

    changeName(list, "Luna Maya");
    changeCity(list, "Denpasar");
    changeAge(list, 27);

    printf("%s, %d of %s",getName(list), getAge(list), getCity(list));

    return 0;
}

Share/Bookmark

C - Complete Pointer And Struct

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char *name;
    char *city;
    int age;
}data;
int addName(data *d){
    d->name = "lady gaga";

    return 0;
}
int addCity(data *d){
    d->city = "new york";

    return 0;
}
int addAge(data *d){
    d->age = 24;

    return 0;
}
char* getName(data *d){
    return d->name;
}
char* getCity(data* d){
    return d->city;
}
int getAge(data* d){
    return d->age;
}
int main(int c){
    system("color 5f");

    data* list;
    list = (data*) malloc(1*sizeof(data));
    addName(list);
    addCity(list);
    addAge(list);
    printf("%s, %d of %s",getName(list), getAge(list), getCity(list));

    return 0;
}

Share/Bookmark

C - Pointer Behind Struct

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char *name;
    char *city;
    int age;
}data;

int addName(data *d){
    d->name = "lady gaga";

    return 0;
}

int addCity(data *d){
    d->city = "new york";

    return 0;
}

int addAge(data *d){
    d->age = 24;

    return 0;
}

int main(int c){
    system("color 5f");

    data* list;
    list = (data*) malloc(1*sizeof(data));

    addName(list);
    addCity(list);
    addAge(list);

    printf("%s, %d of %s",list->name, list->age, list->city);

    return 0;
}

Share/Bookmark

C - The Reaon Behind Pointer

1. Pure of array
========================

#include <stdio.h>
#include <stdlib.h>

int setFirst(char n[]){

    n[0] = 'l';
    n[1] = 'a';
    n[2] = 'd';
    n[3] = 'y';

    return 0;
}

Share/Bookmark

Thursday, April 7, 2011

C - Function Call

Here's a way on how to call function like the most avaiable in many software, like PHP, Apache or other software that built by C:
#define PO_FUNC(bar) bar()
What that means is that whenever you want to call a function, you do it by
PO_FUNC(your_function_name)

Here's an example:
#include <stdio.h>
#define PO_FUNC(bar) bar()

void hello(){
    printf("Hello For All");
}

int main(int argc, char* argv[]){
    PO_FUNC(hello);    // This is the same case as hello()
    return 0;
}
Share/Bookmark

Monday, March 21, 2011

C - File I/O

The functions used:
For writing to a file
1. fprintf( file_pointer, string_format, argument_lists )
2. fputs( string_data, file_pointer )
3. fwrite
4. fputc( char, file_pointer )
5. putc( char, file_pointer )

For reading from a file, use:
1. fscanf ( file_pointer, string_format, argument_lists )
2. fread
3. fgetc( file_pointer ) : char
4. fgets( char_array, size, file_pointer )


FILE *input;
input = fopen("lola.txt","r");

char a;
while(a != EOF){
    a = fgetc(input);
    putchar(a);
}
fclose(input);
Share/Bookmark

C - Console I/O

The available for console I/O functions are:
General:
1. printf
2. scanf
Character:
3. putchar -> int putchar(char)
4. getchar -> char getchar()
String:
5. puts(char[])
6. gets(char[])

Example using putchar and getchar:
char a;
while(a != '.'){
    a = getchar();
    putchar(a);
}
Share/Bookmark

Wednesday, March 16, 2011

C - CMD Alternate Program

/**
 * This program is an alternatif for native cmd program in windows
 * But this version doesn't support for keeping the state.
 *
 * @author  : irfanudin ridho
 * @email   : irfan.ub@gmail.com
 * @version : 1.0
 * @date    : March 16, 2011
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "lola.h"

int main()
{
    system("color 2f");

    printf("Enter your command for cmd: ");

    // without malloc, the program will broke
    char *pause = malloc(sizeof(char));

    while(strcmp(pause,"exit") != 0){
        fflush(stdin);                  // free the buffer
        gets(pause);
        fflush(stdin);                  // free the buffer

        system(pause);
    }

    return 0;
}


Share/Bookmark

C - Using malloc

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20

int main()
{
    system("color f0");

    printf("Enter your name: ");
    char *name = malloc(sizeof(char));
    fflush(stdin);                      // free the buffer
    gets(name);

    printf("Your age: ");
    int age;
    scanf("%d", &age);

    puts("");
    printf("Your data:\n");
    printf("Name: %s\n", name);
    printf("Age : %d\n", age);

    puts("");
    system("pause");

    return 0;
}

Share/Bookmark

C - Pointer For List

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20

struct data{
    int age;
    struct data *nextAge;
};

int main()
{
    system("color 2f");

    struct data zero, satu, dua, tiga;
    zero.age = 24;
    satu.age = 27;
    dua.age = 32;
    tiga.age = 55;

    struct data* next, *current;

    zero.nextAge = &satu;
    satu.nextAge = &dua;
    dua.nextAge = &satu;
    tiga.nextAge = NULL;

    current = zero.nextAge;

    int i;
    for(i=0; i< 3; i++){
        printf("%d\n", (current-i)->age);
    }


    return 0;
}

Share/Bookmark

C - Pointer To Structure

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20

struct data{
    int age;
    struct data *nextAge;
};

int main()
{
    system("color 2f");

    struct data zero, satu, dua, tiga;
    zero.age = 24;

    struct data* ptr;
    ptr = &zero;

    (*ptr).age = 24;

    printf("%d\n", zero.age);
    printf("%d\n", (*ptr).age);
    printf("%d\n", ptr->age);

    return 0;
}

Share/Bookmark

Tuesday, March 15, 2011

C - strncpy

/**
 * This copy n character of the string
 * strncpy(destination, source, n characters)
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20

int main()
{
    system("color 2f");

    char *data = malloc(sizeof(char));
    strncpy(data,"Indonesia is full countries",10);
    puts(data);

    return 0;
}

Share/Bookmark

C - strcpy And malloc

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define N 20

int main()
{
    system("color 2f");

    char *data = malloc(sizeof(char));
    strcpy(data,"Successfull Compliance");
    puts(data);

    char msg[200];
    strcpy(msg, "Indonesia is a nice one");
    puts(msg);

    return 0;
}

Share/Bookmark