代码2-1
#include <stdio.h>
int hoge;
int main(void)
{
char buf[256];
printf("&hoge...%p\n", (void*)&hoge);
printf("Input initial value.\n");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &hoge);
for (;;) {
printf("hoge..%d\n", hoge);
/*
* getchar()で入力待ちの状態にする.
* リターンキーを叩くごとに,hogeの値が増加する.
*/
getchar();
hoge++;
}
return 0;
}
代码2-2
#include <stdio.h>
#include <stdlib.h>
int global_variable;
static int file_static_variable;
void func1(void)
{
int func1_variable;
static int local_static_variable;
printf("&func1_variable..%p\n", (void*)&func1_variable);
printf("&local_static_variable..%p\n", (void*)&local_static_variable);
}
void func2(void)
{
int func2_variable;
printf("&func2_variable..%p\n", (void*)&func2_variable);
}
int main(void)
{
int *p;
/* 関数へのポインタの表示 */
printf("func1..%p\n", (void*)func1);
printf("func2..%p\n", (void*)func2);
/* 文字列リテラルのアドレスの表示 */
printf("string literal..%p\n", (void*)"abc");
/* グローバル変数のアドレスの表示 */
printf("&global_variable..%p\n", (void*)&global_variable);
/* ファイル内static変数のアドレスの表示 */
printf("&file_static_variable..%p\n", (void*)&file_static_variable);
/* ローカル変数の表示 */
func1();
func2();
/* mallocにより確保した領域のアドレス */
p = malloc(sizeof(int));
printf("malloc address..%p\n", (void*)p);
return 0;
}
代码2-3
#include <stdio.h>
void func(int a, int b)
{
int c, d;
printf("func:&a..%p &b..%p\n", (void*)&a, (void*)&b);
printf("func:&c..%p &d..%p\n", (void*)&c, (void*)&d);
}
int main(void)
{
int a, b;
printf("main:&a..%p &b..%p\n", (void*)&a, (void*)&b);
func(1, 2);
return 0;
}
代码2-4
#include <stdio.h>
void hello(void)
{
fprintf(stderr, "hello!\n");
}
void func(void)
{
void *buf[10];
static int i;
for (i = 0; i < 100; i++) {
buf[i] = hello;
}
}
int main(void)
{
int buf[1000];
func();
return 0;
}
代码2-5
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>
void tiny_printf(char *format, ...)
{
int i;
va_list ap;
va_start(ap, format);
for (i = 0; format[i] != '\0'; i++) {
switch (format[i]) {
case 's':
printf("%s ", va_arg(ap, char*));
break;
case 'd':
printf("%d ", va_arg(ap, int));
break;
default:
assert(0);
}
}
va_end(ap);
putchar('\n');
}
int main(void)
{
tiny_printf("sdd", "result..", 3, 5);
return 0;
}
代码2-6
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#define DATA_SIZE (50000)
#define SWAP(a, b) {int temp; temp = a; a = b; b = temp;}
void quick_sort_sub(int *data, int left, int right)
{
int left_index = left;
int right_index = right;
int pivot = data[(left + right) / 2];
while (left_index <= right_index) {
for ( ; data[left_index] < pivot; left_index++)
;
for ( ; data[right_index] > pivot; right_index--)
;
if (left_index <= right_index) {
SWAP(data[left_index], data[right_index]);
left_index++;
right_index--;
}
}
if (right_index > left) {
quick_sort_sub(data, left, right_index);
}
if (left_index < right) {
quick_sort_sub(data, left_index, right);
}
}
void quick_sort(int *data, int data_size)
{
quick_sort_sub(data, 0, data_size - 1);
}
void check(int *data, int size)
{
int i;
for (i = 0; i < size - 1; i++) {
if (data[i] > data[i+1])
fprintf(stderr, "error!\n");
}
fprintf(stderr, "ok!\n");
}
int main(void)
{
int i;
int data[DATA_SIZE];
for (i = 0; i < DATA_SIZE; i++) {
data[i] = rand();
}
quick_sort(data, DATA_SIZE);
check(data, DATA_SIZE);
return 0;
}
代码2-7
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *int_p;
int_p = malloc(sizeof(int));
*int_p = 12345;
free(int_p);
printf("*int_p..%d\n", *int_p);
return 0;
}
代码2-8
#include <stdio.h>
typedef struct {
int int1;
double double1;
char char1;
double double2;
} Hoge;
int main(void)
{
Hoge hoge;
printf("hoge size..%d\n", sizeof(Hoge));
printf("hoge ..%p\n", &hoge);
printf("int1 ..%p\n", &hoge.int1);
printf("double1..%p\n", &hoge.double1);
printf("char1 ..%p\n", &hoge.char1);
printf("double2..%p\n", &hoge.double2);
return 0;
}
代码2-9
#include <stdio.h>
int main(void)
{
int hoge = 0x12345678;
unsigned char *hoge_p = (unsigned char*)&hoge;
printf("%x\n", hoge_p[0]);
printf("%x\n", hoge_p[1]);
printf("%x\n", hoge_p[2]);
printf("%x\n", hoge_p[3]);
return 0;
}