Pointer
Define an Array
#include <stdio.h>
int main()
{
int a = 10;
int *ptr = NULL; // NULL is constant zero
ptr = &a;
printf("a: %d\n", *ptr);
return 0;
}
Pointer Arithmetic
#include <stdio.h>
int main()
{
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *ptr;
ptr = a;
int i;
for(i = 0; i < 10; i++)
printf("%d, %d\n", i, *(ptr+i));
return 0;
}
Pass Pointer to Function and Return Pointer from Function
#include <stdio.h>
#include <stdlib.h>
int * getArray(int size)
{
int *array;
array = (int*) malloc(size*sizeof(int)); // allocate memory
int i;
for(i = 0; i < size; i++)
array[i] = i;
return array;
}
void disp(int *array, int size)
{
int i;
for(i = 0; i < size; i++)
printf("%d, %d\n", i, array[i]);
}
int main()
{
int *array;
array = getArray(10); // get array
disp(array, 10);
free(array); // release memory
return 0;
}
Pointers to Constants
#include <stdio.h>
void disp(const int *array, int size)
{
int i;
for(i = 0; i < size; i++)
printf("%d\n", array[i]);
//array[0] = 10; // error
}
int main()
{
const int array[] = {0, 1, 2, 3};
disp(array, 4);
return 0;
}
Two-Dimensional Array
// single pointer
#include <stdio.h>
#include <stdlib.h>
void setArray(int *array, int r, int c)
{
int i, j;
for(i = 0; i < r; i++)
for(j = 0; j < c; j++)
*(array+i*c+j) = i*10 + j;
}
void dispArray(int *array, int r, int c)
{
int i, j;
for(i = 0; i < r; i++)
{
for(j = 0; j < c; j++)
printf("%10d", *(array+i*c+j));
printf("\n");
}
}
int main()
{
int r = 3, c = 4;
int *array;
array = (int*)malloc(r*c*sizeof(int)); // allocate memory
setArray(array, r, c);
dispArray(array, r, c);
free(array); // free memory
}
// array of pointer
#include <stdio.h>
#include <stdlib.h>
void setArray(int *array[], int r, int c)
{
int i, j;
for(i = 0; i < r; i++)
for(j = 0; j < c; j++)
array[i][j] = i*10 + j;
}
void dispArray(int *array[], int r, int c)
{
int i, j;
for(i = 0; i < r; i++)
{
for(j = 0; j < c; j++)
printf("%10d", *(*(array+i)+j));
printf("\n");
}
}
int main()
{
int r = 3, c = 4;
int *array[r];
int i;
for(i = 0; i < r; i++)
array[i] = (int*)malloc(c*sizeof(int));
setArray(array, r, c);
dispArray(array, r, c);
for(i = 0; i < r; i++)
free(array[i]);
return 0;
}
// pointer to pointer
#include <stdio.h>
#include <stdlib.h>
void setArray(int **array, int r, int c)
{
int i, j;
for(i = 0; i < r; i++)
for(j = 0; j < c; j++)
array[i][j] = i*10 + j;
}
void dispArray(int **array, int r, int c)
{
int i, j;
for(i = 0; i < r; i++)
{
for(j = 0; j < c; j++)
printf("%10d", *(*(array+i)+j));
printf("\n");
}
}
int main()
{
int r = 3, c = 4;
int **array;
// allocate two-dimensional array with a double pointer
array = (int **)malloc(r*sizeof(int *));
int i;
for(i = 0; i < r; i++)
array[i] = (int*)malloc(c*sizeof(int));
setArray(array, r, c);
dispArray(array, r, c);
// free memory
for(i = 0; i < r; i++)
free(array[i]);
free(array);
return 0;
}
String
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *array;
size_t n = 80*sizeof(char);
array = (char *)malloc(n);
printf("Please enter your name:\n");
scanf("%s", array);
printf("%s, length is %lu\n", array, strlen(array));
return 0;
}
Pass Arguments to Program
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
printf("Argument %d: %s\n", i, argv[i]);
return 0;
}