day12() 数组指针 函数指针

数组指针:能够指向数组的指针

 数组名是函数的首地址 两个地方例外

1.sizeof(arr) 计算整个数组的大小

2.&arr  取出的是整个数组的地址 

打印一个二维数组 用不同的方法

void print(int arr[3][3], int sz,int a)
{
    int i = 0;
    for (i = 0; i < a; i++)
    {
        int j = 0;
        for (j = 0; j < sz; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

}

void print(int(*p)[1], int s, int b)
{
    int i = 0;
    for (i = 0; i < s; i++)
    {
        int j = 0;
        for (j = 0; j < b; j++)
        {
        
            printf("%d ", p[i][j]);
        }
        printf("\n");
    }

}

int main()
{
    int arr[3][3] = { 1,2,3,4,5,6,7,8,9};
    int sz = sizeof(arr) / sizeof(arr[0]);

    print( &arr, 3,3);

    system("pause");
    return 0;
}

二维数组的数组名表示的是第一行数组的地址  故不能用int *p 来接收 应该用一个数组指针来接收

解释 int arr[5]:    数组 里面有5个元素 是 int 形的

     int * p[10]:    指针数值  里面有10个元素 每个元素是int*的

 int(*p1)[5]:   是一个数组指针 里面有5个元素 类型去掉数组名字是 int(*)[5]

int(*p3[10])[5]:  是一个数组 里面有10个元素 每个元素的类型是int(*)[5]  就是数组指针 该指针指向的数组里面含有5个元素 每个元素是int

一维数组传参 和二维数组传参

day12() 数组指针 函数指针

 :

二维数组的首元素指的是第一行

一维数组的地址拿指向数组的指针来存取

传过去的是一位数组的地址 要给一个指向一维数组的指针

Int (*p)[5]   p 数组指针 数组里面有5个元素 每个元素是int 形式的

函数指针变量 –存放函数的地址

写一个简单的计算器  熟练运用函数指针变量  两种方式  (函数指针数组)

void menu()
{

    printf("1.add 2.sub 3.mul 4.div\n");

}

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 dis(int x,int y)
{
    return x / y;
}
int cac(int(*p)(int, int))

{
    int x = 0;
    int y = 0;
    printf("输入 x y\n");
    scanf("%d%d", &x, &y);
    int ret = (*p)(x, y);
    printf("%d\n", ret);

}
int main()
{
    
    int input =0;
    do
    {
        
        menu();
        printf("choose:> \n");
        scanf("%d", &input);
        
        switch (input)
        {
        case 1:
            cac(add);
            break;
        case 2:
            cac(sub);
            break;
        case 3:
            cac(mul);
            break;
        case 4:
            cac(dis);
            break;
        case 0:
            printf("exit\n");
            break;
        default:
            printf("choose error\n");
            break;
        }
    } while (input);
    system("pause");
    return 0;
}

int main()
{
    int input = 0;
    do
    {
        printf("choose 1.add 2.sub 3.mul 4.div\n");
        int input = 0;
        scanf("%d", &input);
        if (input == 0)
        {
            printf("tuichu\n");
        }
        else if (1 <= input && input <= 4)
        {
            int(*parry[5])(int, int) = { 0,&add,&sub,&mul,&dis };
            int x = 0;
            int y = 0;
            printf("input x y\n");
            scanf("%d%d", &x, &y);
            int ret = (*(parry+input))(x, y);
            printf("%d\n", ret);
        }
        else
        {
            printf("input error\n");

        }
    } while (input);
    system("pause");
    return 0;
}

上一篇:关于npm的一些基础操作


下一篇:八大排序算法