c语言模板

// https://blog.csdn.net/lianghudream/article/details/149105035
//

// gcc 1.c &&./a.out
#include <stdio.h>




typedef enum { Idle, Running, Error } State;
typedef enum { Start, Stop, Reset } Event;

// 状态处理函数
State handleStart() { return Running; }
State handleStop() { return Idle; }

// 跳转表:StateMachine[当前状态][事件] = 处理函数. 每一个状态,和一个事件发生时候对应的处理函数.
// StateMachine[3][3]:这是一个 3×3 的数组。  记住[] 的优先级比* 高.
// (*StateMachine[3][3]):数组的每个元素是一个 指针。        stateMachine是一个指针组成的数组.
// State (*)(void):这个指针指向一个 没有参数、返回 State 类型的函数。
State (*StateMachine[3][3])() = {
    [Idle]   = { [Start] = handleStart }, 
    [Running] = { [Stop] = handleStop }
};




int test(){//这样可以不在main里面互相污染变量名空间.
        printf("数组指针\n");
        int arr[2][3] = { {1, 2, 3}, {4, 5, 6} };  // 声明一个包含2行3列的二维数组
    int(*ptr)[3];  // 声明一个指向包含3个整数的数组的指针
    ptr = arr;
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", *(*(ptr + i) + j));
        }
        printf("\n");
    }

}
int test3(){

    int a=3;
    int* pa=&a;
    // printf("%d\n",***pa);  //对于非函数,一直进入就不行.
    // printf("%d\n",**pa);
    printf("%d\n",*pa);
    printf("%d\n",*pa);
    printf("%d\n",*pa);

}

int main(void) {

  printf("指针数组\n");
	int* ptrArray[5];  // 声明一个包含5个指向整数的指针的数组

	int a = 1, b = 2, c = 3, d = 4, e = 5;
	ptrArray[0] = &a;
	ptrArray[1] = &b;
	ptrArray[2] = &c;
	ptrArray[3] = &d;
	ptrArray[4] = &e;

	for (int i = 0; i < 5; i++) 
	{
		printf("%d ", *ptrArray[i]);
	}
    printf("=========================\n");



    test();





















//枚举类型:
typedef enum { MON, TUE, WED } Weekday;
for (Weekday day = MON; day <= WED; day++) {
printf("%d\n", day);  // 输出0, 1, 2
}

printf("测试test3\n");
test3();


printf("加几个星都表示这个指针所指向的函数,不会一直进入内容");//多取几次星也都对.
printf("StateMachine[Idle][Start]() = %d\n", (***StateMachine[Idle][Start])()); //函数指针表示一个指针他指向的是一个函数. 函数的指针, 主语是指针.
printf("StateMachine[Idle][Start]() = %d\n", (**StateMachine[Idle][Start])()); //函数指针表示一个指针他指向的是一个函数. 函数的指针, 主语是指针.
printf("StateMachine[Idle][Start]() = %d\n", (*StateMachine[Idle][Start])()); //函数指针表示一个指针他指向的是一个函数. 函数的指针, 主语是指针.
printf("StateMachine[Idle][Start]() = %d\n", (StateMachine[Idle][Start])()); 
// 看出来函数指针加不加*都表示这个函数.










    struct Point { int x, y; };
    struct Point p = { .y = 2, .x = 3 };  // 等价于 {3, 2} // 指定初始化器(Designated Initializer)是C99标准引入的重要特性  这种显示初始化的方式可以使代码更加清晰易读

    printf("p.x = %d, p.y = %d\n", p.x, p.y);

union Data { int i; float f; };
union Data d1 = { .f = 3.14 };  // 仅初始化f成员。

    printf("d.i = %d, d.f = %f\n", d1.i, d1.f);

    printf("Hello, World!\n");
    int arr[6] = {[5] = 212}; // C99 指定初始化器
    for (int i = 0; i < 6; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

posted on 2025-12-22 14:58  张博的博客  阅读(3)  评论(0)    收藏  举报

导航