进度日志27 (返回指针值的函数,指针数组,指向指针的指针,指针数组做main函数的形参)

这篇博客详细介绍了C语言中关于指针的实践,包括如何使用返回指针的函数处理学生成绩,理解指针数组和指向指针的指针的概念,并通过示例展示了如何对字符串数组进行排序。此外,还讨论了main函数接收指针参数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习笔记1:返回指针的函数

题目1:有若干个学生的成绩,每个学生有四门课程,要求在用户输入学生序号以后,能输出该学生的全部程序,用指针函数来实现。

答案:

#include <stdio.h>
void main()
{
    double score[][4] = { {60.0,70.0,80.5,90.5},{56.0,89.0,67.0,88.0},{34.2,78.5,90.5,82} };
    double *search(double(*pointer)[4], int n);
    double *p;
    int i, m;

    printf("Please enter the number of student:");
    scanf("%d", &m);
    m += 1;

    printf("The scores of No.%d are: \n", m);

    p = search(score, m); //传递到这里

    for (i = 0; i < 4; i++)
    {
        printf("%5.2f\t", *(p + i));
    }
    printf("\n\n\n");
}
double *search(double(*pointer)[4], int n)
{
    double *pt;
    pt = *(pointer + n);
    return pt;
}

运行结果:

指针函数和函数指针的区别

指针函数是指带指针的函数,本质是一个函数

函数指针是指向函数的指针变量,本质是一个指针

学习笔记2:指针数组和指向指针的指针

指针数组是指元素均为指针的数组

形式为:类型名 数组名[数组长度]

例如:int *name[4];\

编程:

#include <stdio.h>
void main()
{
    int a[5] = { 1,3,5,7,9 };
    int *name[5] = { &a[0],&a[1],&a[2],&a[3],&a[4] };
    int i;

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

运行结果:

题目:将下列字符串按字母顺序由小到大输出

char *name[]={"How are you","What's your name","Thank you","Go home"};

提示:

①可以声明一个数组指针来指向

②将排序利用strcmp()函数来解决

③各个功能抽象为函数或文件

答案:

#include <stdio.h>
#include <string.h>

void main()
{
    void sort(char *name[], int n);
    void print(char *name[], int n);

    char *name[] = { "How are you","What's your name","Thank you","Go home" };
    int n = 4;

    sort(name, n);  //把name的首地址给他,在告诉他有4个字符串
    print(name, n);
}
void sort(char *name[], int n)
{
    char *temp;
    int i, j, k;

    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(name[k], name[j]) > 0)
            {
                k = j;
            }
            if (k != i)
            {
                temp = name[i];
                name[i] = name[k];
                name[k] = temp;
            }
        }
    }
}
void print(char *name[], int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%s\n", name[i]);
    }
}

运行结果:

学习笔记3:指向指针的指针

形式:char **p;

编程:

#include <stdio.h>

void main()
{
    char *name[] = { "How old are you?","I am King.","Thank you.","Do you understand?" };
    char **p;
    int i;
    for (i = 0; i < 4; i++)
    {
        p = name + i;
//name+i表示指向下一个元素
        printf("%s\n", *p);
    }
}

运行结果:

学习笔记4:指针数组做main函数的形参

平时写程序时常用void main(),实际上main函数可以有参数   //目前新版要求写成int main(void),两种都可以,写哪个都无所谓

例如void main (int argc, char *argv[])

argc和argv就是main函数的形参

编程:

#include <stdio.h>
#include <stdlib.h>

void main(int argc, char *argv[])
{
    int i;
    printf("the number of string is : %d\n", argc - 1);
    for (i = 1; i < argc; i++)
    {
        printf("the string %d is : %s\n", i, argv[i]);
    }
}

运行结果:

  ......一脸懵逼......o((⊙﹏⊙))o .jpg......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值