#include <stdio.h>
#include <stdlib.h>
#if 0
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void qSort(int *begin, int *end)
{
int t = *begin;
int *p = begin;
int *q = end;
if(begin > end)
{
return ;
}
while(p < q)
{
while(p < q && *q >= t)
{
--q;
}
while(p < q && *p <= t)
{
++p;
}
swap(p, q);
}
swap(p, begin);
qSort(begin, p - 1);
qSort(p + 1, end);
}
int main(void)
{
const char *p = "Hello %d %s";
printf(p, 10, "World!");
// int a[10] = {-1,2,-3,4,-5,6,-7,8,-9,0, };
// int len = sizeof(a) / sizeof(*a);
// printf("%lu\n", sizeof(int [10]));
/* qSort(a, a + len - 1);
int i;
for(i = 0;i < len;++i)
{
printf("%d\n", a[i]);
}
*/
return 0;
}
void printArray2D(int (*a)[4], int rows)
{
int i, j;
for(i = 0;i < rows;++i)
{
for(j = 0;j < 4;++j)
{
printf("%2d ", *(*(a + i) + j));
}
puts("");
}
}
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void reverse(int *begin, int *end)
{
while(begin < end)
{
swap(begin, end);
++begin;
--end;
}
}
void reverse2D(int (*a)[4], int rows)
{
int i;
for(i = 0;i < rows;++i)
{
reverse(*(a + i) , *(a + i) + 3);
}
}
int sumOfArray2D(int (*a)[4], int rows)
{
int sum = 0,i, j;
for(i = 0;i < rows;++i)
{
for(j = 0;j < 4;++j)
{
if(0 == i || rows - 1 == i || 0 == j || 3 == j)
{
sum += *(*(a + i) + j);
}
}
}
}
int main(void)
{
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d\n", *((int *)(a + 3) - 3));
/* int rows = sizeof(a) / sizeof(*a);
int cols = sizeof(*a) / sizeof(**a);
reverse2D(a, rows);
printArray2D(a, rows);
*/
//a <=> &a[0]
// int (*p)[4] = NULL;
// p = a;
//*(p + 1) <=> p[1] a[1] int *
// printf("%d\n", *(*(p + 1) + 2)); //a[i][j] <=> *(*(a + i) + j)
return 0;
}
#include <string.h>
int fib(int n)
{
if(1 == n || 2 == n)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
int main(void)
{
int n = 10, i;
int *p = NULL;
p = calloc(n , sizeof(int));
for(i = 0;i < n;++i)
{
p[i] = fib(i + 1);
}
for(i = 0;i < n;++i)
{
printf("%d\n", p[i]);
}
int m = 20;
p = realloc(p, m * sizeof(int));
// int *q = malloc(m * sizeof(int));
// memcpy(q, p, n * sizeof(int));
// free(p);
// p = q;
for(i = n;i < m;++i)
{
p[i] = fib(i + 1);
}
for(i = 0;i < m;++i)
{
printf("%d\n", p[i]);
}
free(p);
p = NULL;
return 0;
}
int g_i;
int *fn(int *p)
{
static int i = 100;
return p;
}
int main(void)
{
int i = 10;
int *ret = fn(&i);
*fn(&i) = 1000;
printf("%d\n", i);
return 0;
}
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
void fn(void)
{
}
int main(void)
{
int (*p)(int , int ) = NULL;
p = sub;
printf("%d\n", p(10, 20));
return 0;
}
#endif
int pow2(int n)
{
return n * n;
}
int fn(int n)
{
return n;
}
void sort(int *a, int len, int (*pfn)(int))
{
int i, j;
for(i = 0;i < len - 1;++i)
{
for(j = i + 1;j < len;++j)
{
if(pfn(a[i]) > pfn(a[j]))
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
int div3(int n)
{
return n % 3 == 0;
}
int div5(int n)
{
return n % 5 == 0;
}
void printArray(int *a, int len, int (*pfn)(int))
{
int i;
for(i = 0;i < len;++i)
{
if(pfn(a[i]) != 0)
{
printf("%d\n", a[i]);
}
}
}
int intcmp(const void *p1, const void *p2)
{
int *q1 = (int *)p1;
int *q2 = (int *)p2;
if(*q1 > *q2)
{
return 1;
}
else if(*q1 == *q2)
{
return 0;
}
else
{
return -1;
}
}
int main(void)
{
short a[] = {-1,2,-3,4,-5,6,-7,8,-9,0};
int len = sizeof(a) / sizeof(*a);
qsort(a, len, sizeof(*a), intcmp);
int i;
for(i = 0;i < len;++i)
{
printf("%d\n", a[i]);
}
// void (*pfn)(void) = (void (*)(void))(0x30008000);
// pfn();
// sort(a, len, pow2);
// printArray(a, len, div5);
return 0;
}