指针数组和指向指针的指针

1 用函数指针变量调用函数

在 C 语言中,可以定义一个指针变量来指向函数。通过这种方式,可以使用函数指针变量来调用函数,实现动态地选择要执行的函数。

函数指针变量的定义形式为:数据类型(*指针变量名)(函数参数表列)

函数的调用可以通过函数名调用,也可以通过函数指针调用

int(*p)(int,int):表示定义一个指向函数的指针变量p,而不是固定的指向哪一个函数,而只是定义了这样一个类型的变量 


int doublecmp(const void *p1,const void *p2)
{
    double *q1 = (double *)p1;
    double *q2 = (double *)p2;
    if(*q1 > *q2)
    {
        return 1;
    }
    else if(*q1 < *q2)
    {
        return -1;
    }
    else
    {
        return 0;
    }
}




int main()
{
    double a[] = {1,-2,3,-4,5,-6,7,-8,9,0};
    int len = sizeof(a) / sizeof(a[0]);
    qsort(a,len,sizeof(a[0]),doublecmp);
    int i;
    for(i = 0;i < len;++i)
    {
        printf("%f\n",a[i]);
    }
    return 0;
}

2 用指向函数的指针作函数参数

把指针作为参数传到其他函数

指针数组和指向指针的指针

1 指针数组的概念

指针数组是一个数组,其元素都是指针类型。指针数组的每个元素都可以指向不同的内存地址或数据。

定义指针数组的形式为:类型名 *数组名[数组长度];

2 指向指针的指针

指向指针的指针是一种多级指针,它指向的是另一个指针变量的地址。

定义指向指针的指针的形式为:类型名 **指针变量名;

通过指向指针的指针,可以间接访问其所指向的指针所指向的数据:

void printString(char **s,int len)
{
    int i;
    for(i = 0;i < len;++i)
    {
        puts(s[i]);
    }
}

void swap(char **s1,char **s2)
{
    char *t;
    t = *s1;
    *s1 = *s2;
    *s2 = t;
}

void reverse(char **s,int len)
{
    int i;
    for(i = 0;i < len / 2;++i)
    {
        swap(&s[i],&s[len - i -1]);
    }
}

void sortString(char **s,int len)
{
    int i,j;
    for(i = 0;i < len - 1;++i)
    {
        for(j = i + 1;j < len;++j)
        {
            if(strcmp(*(s + i),*(s + j)) > 0)
            {
                swap(s + i,s + j);
            }
        }
    }
}

3 指针数组作 main 函数的形参

在 C 语言中,main 函数可以接受两个参数,其中第二个参数是一个指向指针的指针,通常用于处理命令行参数。

在运行程序时,可以在命令行中输入多个参数,这些参数将被存储在 argv 指针数组中,argc 表示参数的个数。在 main 函数中,可以通过遍历 argv 数组来获取和处理命令行参数。

4、排序

void sortString(char **s,int len)
{
    int i,j;
    for(i = 0;i < len - 1;++i)
    {
        for(j = i + 1;j < len;++j)
        {
            if(strcmp(*(s + i),*(s + j)) > 0)
            {
                swap(s + i,s + j);
            }
        }
    }
}

  • 23
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值