• Linux C语言基础 day10


    目录

    学习目标:

    学习内容:

    1.指针指向数组

    1.1 指针与数组的关系

    1.2 指针与一维数组关系实现

    1.2.1 指针与一维数组的关系

    1.2.2  指针指向一维整型数组作为函数参数传递

    课外作业:


    学习目标:

    • 一周掌握 C基础知识

    学习内容:

    1.指针指向数组

    1.1 指针与数组的关系

            1. 一维数组的数组名,本质上是一个该数组的第一个元素的地址

                    int arr[5]; arr &arr[0]

            2. 数组名是一个地址常量,不能被重新赋值,但是,数组名可以进行偏移

            3.  二维数组的数组名,从数值上来说也是一个该数组第一个元素的地址

                    int arr[3][4]; arr <==> &arr[0]; arr[0] <==>&arr[0][0]; arr[1] <==>&arr[1][0]

    1.2 指针与一维数组关系实现

    1.2.1 指针与一维数组的关系

    1. #include
    2. int main(int argc, const char *argv[])
    3. {
    4.     //定义一个一维数组
    5.     int arr[] = {3,8,3,2,4};
    6.     int len = sizeof(arr)/sizeof(arr[0]);    //求数组长度
    7.     //定义指针指向一维数组
    8.     int *ptr = arr;             //int *ptr = &arr[0];
    9.     //数据输出方式1,从值的角度
    10.     printf("数据元素分别是:");
    11.     for(int i=0; i
    12.     {
    13.         printf("%d\t", arr[i]);
    14.     }
    15.     printf("\n");
    16.     //输出方式2:从数组名的角度
    17.     printf("数据元素分别是:");
    18.     for(int i=0; i
    19.     {
    20.         printf("%d\t", *(arr+i) );
    21.     }
    22.     printf("\n");
    23.     //输出方式3:从指针变量的角度
    24.     printf("数据元素分别是:");
    25.     for(int i=0; i
    26.     {
    27.         printf("%d\t", *(ptr+i) );
    28.     }
    29.     printf("\n");
    30.     //输出方式4:从指针的角度找值
    31.     printf("数据元素分别是:");
    32.     for(int i=0; i
    33.     {
    34.         printf("%d\t", ptr[i]);
    35.     }
    36.     printf("\n");
    37.     //输出方式5:从指针变量的角度
    38.     printf("数据元素分别是:");
    39.     for(int i=0; i
    40.     {
    41.         printf("%d\t", *(ptr++));
    42.        
    43.     }
    44.     printf("\n");
    45.     return 0;
    46. }

    1.2.2  指针指向一维整型数组作为函数参数传递

            当实参使用的是数组名进行传递时,本质上传递的是数组首元素的地址

            被调函数的形参可以是一个数组接收,也可以是一个指针变量接收

            虽然使用的是数组接收,但是,本质上也还是使用的是指针接收

    例如:主函数中定义一个长度为8的数组,调用自定义函数完成输入、自定义函数完成输出、自定义函数求最大值、自定义函数完成数组的逆置。并对这些函数进行测试。要求,形参使用指针接收

    1. #include
    2. #define MAX 8
    3. // 函数声明
    4. void inputArray(int *arr, int length);
    5. void outputArray(const int *arr, int length);
    6. int findMaxValue(const int *arr, int length);
    7. void reverseArray(int *arr, int length);
    8. int main() {
    9.     int arr[MAX];
    10.     printf("请输入%d个整数:\n", MAX);
    11.     inputArray(arr, MAX); // 输入数组
    12.     printf("输入的数组为:\n");
    13.     outputArray(arr, MAX); // 输出数组
    14.     int maxVal = findMaxValue(arr, MAX); // 求最大值
    15.     printf("数组中的最大值是:%d\n", maxVal);
    16.     reverseArray(arr, MAX); // 逆置数组
    17.     printf("逆置后的数组为:\n");
    18.     outputArray(arr, MAX); // 输出逆置后的数组
    19.     return 0;
    20. }
    21. // 输入数组元素
    22. void inputArray(int *arr, int length) {
    23.     for (int i = 0; i < length; i++) {
    24.         scanf("%d", arr + i);
    25.     }
    26. }
    27. // 输出数组元素
    28. void outputArray(const int *arr, int length) {
    29.     for (int i = 0; i < length; i++) {
    30.         printf("%d ", arr[i]);
    31.     }
    32.     printf("\n");
    33. }
    34. // 求数组的最大值
    35. int findMaxValue(const int *arr, int length) {
    36.     int max = arr[0];
    37.     for (int i = 1; i < length; i++) {
    38.         if (arr[i] > max) {
    39.             max = arr[i];
    40.         }
    41.     }
    42.     return max;
    43. }
    44. // 逆置数组
    45. void reverseArray(int *arr, int length) {
    46.     for (int i = 0; i < length / 2; i++) {
    47.         int temp = arr[i];
    48.         arr[i] = arr[length - 1 - i];
    49.         arr[length - 1 - i] = temp;
    50.     }
    51. }


    课外作业:

    1. 自定义函数(my_strlen)实现strlen函数的功能

    解析:

    1. #include
    2. #include
    3. #define MAX 50
    4. void my_strlen(char *a,int count){
    5.     printf("请输入字符串:");
    6.     gets(a);
    7.     while (*a++)
    8.     {
    9.        count++;
    10.     }
    11.     printf("长度为%d\n",count);
    12. }
    13. int main(int argc, char const *argv[])
    14. {
    15.     char str[MAX]="";
    16.     char s[MAX]="";
    17.     int count=0;
    18.    my_strlen(str,count);
    19.     return 0;
    20. }


     

    2. 自定义函数(my_strcpy)实现strcpy函数的功能

    解析:

    1. #include
    2. #include
    3. #define MAX 50
    4. void my_strcpy(char *a,const char *b){
    5.     while (*b != '\0')
    6.     {
    7.         *a=*b;        //将b里的值写入a
    8.         a++;
    9.         b++;
    10.     }
    11.     *a='\0';      //‘\0’写入a
    12. }
    13. int main(int argc, char const *argv[])
    14. {
    15.     char str[MAX]="";
    16.     char s[MAX]="";
    17.     int count=0;
    18.     printf("请输入第一个字符串内容");
    19.     gets(str);
    20.     printf("请输入第二个字符串内容");
    21.     gets(s);
    22.    my_strcpy(str,s);        //调用函数
    23.     printf("str=%s\t,s=%s\t",str,s);
    24.     return 0;
    25. }


     

    3.自定义函数(my_strcmp)实现strcmp函数的功能

    解析:

    1. #include
    2. #include
    3. #define MAX 50
    4. int my_strcmp(const  char *a,const char *b){
    5. int len = sizeof(*b)/sizeof(char);
    6.     while (*a  && *b)
    7.     {
    8.         a++;
    9.         b++;
    10.     }
    11.     return (char) *a -(char) *b;
    12.     }
    13. int main(int argc, char const *argv[])
    14. {
    15.     char str[MAX]="";
    16.     char s[MAX]="";
    17.     int count=0;
    18.     printf("请输入第一个字符串内容");
    19.     gets(str);
    20.     printf("请输入第二个字符串内容");
    21.     gets(s);
    22.    int sum = my_strcmp(str,s);
    23.     if(sum ==0){
    24.         printf("相等");
    25.     }else if (sum <0)
    26.     {
    27.         printf("第二个字符串内容大");
    28.     }else
    29.     {
    30.        printf("第一个字符串内容大");
    31.     }
    32.     
    33.     
    34.     return 0;
    35. }

    4.自定义函数(my_strcat)实现strcat函数的功能

    解析:

    1. #include
    2. #include
    3. #define MAX 50
    4. void my_strcat(char *a,const char *b){
    5.     while (*a != '\0')
    6.     {
    7.         a++;
    8.     }
    9.     while (*b != '\0')
    10.     {
    11.         *a++ = *b++;
    12.     }
    13.     *a = '\0';
    14. }
    15. int main(int argc, char const *argv[])
    16. {
    17.     char str[MAX]="";
    18.     char s[MAX]="";
    19.     int count=0;
    20.     printf("请输入第一个字符串内容");
    21.     gets(str);
    22.     printf("请输入第二个字符串内容");
    23.     gets(s);
    24.    my_strcat(str,s);
    25.     printf("str=%s\n",str);
    26.     return 0;
    27. }

    5.自定义函数(my_strstr)实现求src字符串中是否包含子串dest字符串

    解析:

    1. #include
    2. // 自定义函数 my_strstr,实现 strstr 函数的功能
    3. char  my_strstr(const char *src, const char *dest) {
    4.     int src_len = 0, dest_len = 0;
    5.     const char *src_ptr, *dest_ptr;
    6.     // 计算 dest 字符串的长度
    7.     while (dest[dest_len] != '\0') {
    8.         dest_len++;
    9.     }
    10.     // 遍历 src 字符串
    11.     for (src_ptr = src; *src_ptr != '\0'; src_ptr++) {
    12.         // 如果当前字符匹配 dest 的第一个字符
    13.         if (*src_ptr == *dest) {
    14.             int i = 0;
    15.             // 检查 dest 是否完全匹配
    16.             for (i = 0; i < dest_len; i++) {
    17.                 // 如果字符不匹配或到达 src 的末尾,则跳出循环
    18.                 if (src_ptr[i] != dest[i] || src_ptr[i] == '\0') {
    19.                     break;
    20.                 }
    21.             }
    22.             // 如果完全匹配,返回1
    23.             if (i == dest_len) {
    24.                 return 1;
    25.             }
    26.         }
    27.     }
    28.     // 如果没有找到 dest,返回 0
    29.     return 0;
    30. }
    31. int main() {
    32.     char str[50]="";
    33.     char s[50]="";
    34.     printf("请输入第一个字符串内容");
    35.     gets(str);
    36.     printf("请输入第二个字符串内容");
    37.     gets(s);
    38.     // 使用自定义函数查找子串
    39.     char found = my_strstr(str, s);
    40.     if (found != 0) {
    41.         printf("找到子串\n" );
    42.     } else {
    43.         printf("子串未找到。\n");
    44.     }
    45.     return 0;
    46. }

  • 相关阅读:
    一个可见又不可见的窗口
    AI智能机器人的语音识别是如何实现的 ?
    740 · 零钱兑换 2
    京东云开发者|探寻软件架构的本质,到底什么是架构?
    Linux权限的认识
    Java开发备战 - JavaSe(基础篇)
    Spark SQL_第六章笔记
    Java 之 ElasticSearch8.x.x 【一篇文章精通系列】【ES的基本操作,ES安装,ES head + Kibana】
    【网络】把路由器用作交换机的方案
    LLM面面观之LLM复读机问题及解决方案
  • 原文地址:https://blog.csdn.net/weixin_50357983/article/details/140375371