C语言练习 -- 9

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>


//int main()
//{
//    //字符指针
//    char ch = 'w';
//    char* p = &ch;
//    const char* p2 = "abcdef";
//    //指针数组 - 数组 - 存放指针的数组
//    int* arr[10];
//    char* ch[5];
//    //数组指针 - 指向数组的指针
//    int* p3;//整型指针 - 指向整型的指针
//    char* p4;//字符指针 - 指向字符的指针
//    int arr2[5];//数组
//    int(* pa)[5] = &arr2;//取出数组的地址,pa就是一个数组指针
//    return 0;
//}


//test(int arr[3][5])
//{}
//test1(int arr[][5])
//{}
//test2(int arr[3][])//err
//{}
//test3(int arr[][])//err
//{}
//
//
//int main()
//{
//    int arr[3][5] = { 0 };
//    test(arr);
//    test1(arr);
//    test2(arr);
//    test3(arr);
//    return 0;
//}

//void test3(int* arr)//err
//{}
//void test4(int** arr)//err
//{}
//void test5(int(*arr)[5])
//{}
//
//int main()
//{
//    int arr[3][5] = { 0 };
//    //test3(arr);
//    //test4(arr);
//    test5(arr);
//    return 0;
//}

//void test1(int* p)
//{}
//
//void test2(char* p)
//{}
//
//int main()
//{
//    int a = 10;
//    int* p1 = &a;
//    test1(&a);//ok
//    test1(p1);//ok
//    char ch = 'w';
//    char* pc = &ch;
//    test2(&ch);//ok
//    test2(pc);//ok
//    return 0;
//}

//void test(int** p)
//{}
//
//int main()
//{
//    int* ptr;
//    int** pp = &ptr;
//    test(&ptr);
//    test(pp);
//    int* arr[10];
//    test(arr);//指针数组也可以
//    return 0;
//}


//数组指针 - 指向数组的指针
//函数指针 - 指向函数的指针 - 存放函数地址的一个指针

//Add(int x,int y)
//{
//    int z = 0;
//    z = x + y;
//    return z;
//}
//
//int main()
//{
//    int a = 10;
//    int b = 20;
//    //int arr[10] = { 0 };
//    //int(* p)[10] = &arr;
//    ////arr;
//    ////printf("%d\n", Add(a, b));
//    //
//    ////&函数名 和 函数名 都是函数的地址
//    //printf("%p\n", &Add);
//    //printf("%p\n", Add);
//    int(*pa)(int,int) = Add;
//    printf("%d\n", (*pa)(2, 3));
//    return 0;
//}

//void Print(char* str)
//{
//    printf("%s\n", str);//%s - 字符串
//}
//
//
//int main()
//{
//    void (*p)(char*) = Print;
//    (* p)("hello bit");
//    return 0;
//}

//signal是一个函数声明
//signal函数的参数有两个,第一个是int。第二个是函数指针,该函数指针指向的函数的参数是int,返回类型是void
//signal函数的返回类型也是一个函数指针,该函数指针指向的函数的参数是int,返回类型是void

//void(*signal(int, void(*)(int)))(int);//繁琐
//
//typedef void(* pfun_t)(int);
//pfun_t signal(int, pfun_t);//简化
//
//typedef unsigned int uint;//对比typedef


//int Add(int x, int y)
//{
//    int z = 0;
//    z = x + y;
//    return z;
//}
//
//int main()
//{
//    int a = 10;
//    int b = 20;
//
//    int(*pa)(int, int) = Add;
//    printf("%d\n", (pa)(2, 3));
//    printf("%d\n", (*pa)(2, 3));
//
//    printf("%d\n", *pa(2, 3));//err
//
//    return 0;
//}

//int Add(int x, int y)
//{
//    return x + y;
//}
//int Sub(int x, int y)
//{
//    return x - y;
//}
//int Mul(int x, int y)
//{
//    return x * y;
//}
//int Div(int x, int y)
//{
//    return x / y;
//}
//int main()
//{
//    //指针数组
//    //int* arr[5];//
//    //需要一个数组,这个数组可以存放4个函数的地址 - 函数指针的数组
//    int(* pa)(int,int) = Add;//Sub/Mul/Div
//    int(*parr[4])(int, int) = { Add, Sub, Mul, Div };//函数指针的数组
//    int i = 0;
//    for (i = 0; i < 4; i++)
//    {
//        printf("%d\n", parr[i](2, 3));//5,-1,6,0
//    }
//    return 0;
//}


char* my_strcpy(char* dest, const char* src);
//写一个函数指针pf,能够指向my_strcpy
//char* (*pf)(char*,const char*);
//写一个函数指针数组 pfArr,能够存放4个my_strcpy函数的地址
//char* (*pfArr[4])(char*, const char*);

 

posted @ 2022-05-22 12:48  JimJZY  阅读(78)  评论(0)    收藏  举报