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 指针与一维数组的关系

#include<stdio.h>



int main(int argc, const char *argv[])

{

    //定义一个一维数组

    int arr[] = {3,8,3,2,4};

    int len = sizeof(arr)/sizeof(arr[0]);    //求数组长度



    //定义指针指向一维数组

    int *ptr = arr;             //int *ptr = &arr[0];



    //数据输出方式1,从值的角度

    printf("数据元素分别是:");

    for(int i=0; i<len; i++)

    {

        printf("%d\t", arr[i]);

    }

    printf("\n");



    //输出方式2:从数组名的角度

    printf("数据元素分别是:");

    for(int i=0; i<len; i++)

    {

        printf("%d\t", *(arr+i) );

    }

    printf("\n");



    //输出方式3:从指针变量的角度

    printf("数据元素分别是:");

    for(int i=0; i<len; i++)

    {

        printf("%d\t", *(ptr+i) );

    }

    printf("\n");



    //输出方式4:从指针的角度找值

    printf("数据元素分别是:");

    for(int i=0; i<len; i++)

    {

        printf("%d\t", ptr[i]);

    }

    printf("\n");



    //输出方式5:从指针变量的角度

    printf("数据元素分别是:");

    for(int i=0; i<len; i++)

    {

        printf("%d\t", *(ptr++));

       

    }

    printf("\n");



    return 0;

}

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

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

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

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

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

#include <stdio.h>



#define MAX 8



// 函数声明

void inputArray(int *arr, int length);

void outputArray(const int *arr, int length);

int findMaxValue(const int *arr, int length);

void reverseArray(int *arr, int length);



int main() {

    int arr[MAX];



    printf("请输入%d个整数:\n", MAX);

    inputArray(arr, MAX); // 输入数组



    printf("输入的数组为:\n");

    outputArray(arr, MAX); // 输出数组



    int maxVal = findMaxValue(arr, MAX); // 求最大值

    printf("数组中的最大值是:%d\n", maxVal);



    reverseArray(arr, MAX); // 逆置数组



    printf("逆置后的数组为:\n");

    outputArray(arr, MAX); // 输出逆置后的数组



    return 0;

}



// 输入数组元素

void inputArray(int *arr, int length) {

    for (int i = 0; i < length; i++) {

        scanf("%d", arr + i);

    }

}



// 输出数组元素

void outputArray(const int *arr, int length) {

    for (int i = 0; i < length; i++) {

        printf("%d ", arr[i]);

    }

    printf("\n");

}



// 求数组的最大值

int findMaxValue(const int *arr, int length) {

    int max = arr[0];

    for (int i = 1; i < length; i++) {

        if (arr[i] > max) {

            max = arr[i];

        }

    }

    return max;

}



// 逆置数组

void reverseArray(int *arr, int length) {

    for (int i = 0; i < length / 2; i++) {

        int temp = arr[i];

        arr[i] = arr[length - 1 - i];

        arr[length - 1 - i] = temp;

    }

}


课外作业:

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

解析:

#include<stdio.h>
#include<string.h>
#define MAX 50
void my_strlen(char *a,int count){
    printf("请输入字符串:");
    gets(a);
    while (*a++)
    {
       count++;
    }
    printf("长度为%d\n",count);
}

int main(int argc, char const *argv[])
{
    char str[MAX]="";
    char s[MAX]="";
    int count=0;
   my_strlen(str,count);
    return 0;
}


 

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

解析:

#include<stdio.h>
#include<string.h>
#define MAX 50

void my_strcpy(char *a,const char *b){

    while (*b != '\0')
    {
        *a=*b;        //将b里的值写入a
        a++;
        b++;
    }
    *a='\0';      //‘\0’写入a

}
int main(int argc, char const *argv[])
{
    char str[MAX]="";
    char s[MAX]="";
    int count=0;
    printf("请输入第一个字符串内容");
    gets(str);
    printf("请输入第二个字符串内容");
    gets(s);
   my_strcpy(str,s);        //调用函数
    printf("str=%s\t,s=%s\t",str,s);
    return 0;
}


 

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

解析:

#include<stdio.h>
#include<string.h>
#define MAX 50

int my_strcmp(const  char *a,const char *b){
int len = sizeof(*b)/sizeof(char);
    while (*a  && *b)
    {
        a++;
        b++;
    }
    return (char) *a -(char) *b;
    }
int main(int argc, char const *argv[])
{
    char str[MAX]="";
    char s[MAX]="";
    int count=0;
    printf("请输入第一个字符串内容");
    gets(str);
    printf("请输入第二个字符串内容");
    gets(s);
   int sum = my_strcmp(str,s);
    if(sum ==0){
        printf("相等");
    }else if (sum <0)
    {
        printf("第二个字符串内容大");
    }else
    {
       printf("第一个字符串内容大");
    }
    
    
    return 0;
}

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

解析:

#include<stdio.h>
#include<string.h>
#define MAX 50

void my_strcat(char *a,const char *b){

    while (*a != '\0')
    {
        a++;
    }
    while (*b != '\0')
    {
        *a++ = *b++;
    }
    *a = '\0';
}
int main(int argc, char const *argv[])
{
    char str[MAX]="";
    char s[MAX]="";
    int count=0;
    printf("请输入第一个字符串内容");
    gets(str);
    printf("请输入第二个字符串内容");
    gets(s);
   my_strcat(str,s);
    printf("str=%s\n",str);
    return 0;
}

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

解析:

#include <stdio.h>

// 自定义函数 my_strstr,实现 strstr 函数的功能
char  my_strstr(const char *src, const char *dest) {
    int src_len = 0, dest_len = 0;
    const char *src_ptr, *dest_ptr;

    // 计算 dest 字符串的长度
    while (dest[dest_len] != '\0') {
        dest_len++;
    }

    // 遍历 src 字符串
    for (src_ptr = src; *src_ptr != '\0'; src_ptr++) {
        // 如果当前字符匹配 dest 的第一个字符
        if (*src_ptr == *dest) {
            int i = 0;

            // 检查 dest 是否完全匹配
            for (i = 0; i < dest_len; i++) {
                // 如果字符不匹配或到达 src 的末尾,则跳出循环
                if (src_ptr[i] != dest[i] || src_ptr[i] == '\0') {
                    break;
                }
            }

            // 如果完全匹配,返回1
            if (i == dest_len) {
                return 1;
            }
        }
    }

    // 如果没有找到 dest,返回 0
    return 0;
}

int main() {
    char str[50]="";
    char s[50]="";
    printf("请输入第一个字符串内容");
    gets(str);
    printf("请输入第二个字符串内容");
    gets(s);

    // 使用自定义函数查找子串
    char found = my_strstr(str, s);

    if (found != 0) {
        printf("找到子串\n" );
    } else {
        printf("子串未找到。\n");
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql-connector-java 8.0.33 反序列化漏洞

前言 经过与oracle官方沟通&#xff0c;在最新的mysql-connector-j 9.0.0里不存在这个问题&#xff0c;所以他们不认为这是个漏洞 不过确实&#xff0c;mysql-connector-java这个分支已经迁移到mysql-connector-j了&#xff0c;当时没注意&#xff0c;交的时候只注意了mysql-c…

C#知识|账号管理系统:添加账号的功能笔记

哈喽,你好啊,我是雷工! 本节记录账号管理系统中添加账号的逻辑过程,以下为学习笔记。 01 实现内容 ①:实现当点击【保存到数据库】按钮时,将账号名称、原创篇数、账号简介、账号类型显示的内容存储到LGAccountManagerDB数据库的Account表中; ②:实现点击【保存到数据库…

从LeetCode215看排序算法

目录 LeetCode215 数组的第K个最大元素 ① 第一反应&#xff1a;java的内置排序Arrays.sort() ② 冒泡排序 ③归并排序&#xff08;先分解再合并&#xff09; ④快速排序&#xff08;边分解边排序&#xff09; ⑤堆排序 LeetCode215 数组的第K个最大元素 给定整数数组 nums…

LLM(大语言模型)解码时是怎么生成文本的?

Part1配置及参数 transformers4.28.1 源码地址&#xff1a;transformers/configuration_utils.py at v4.28.1 huggingface/transformers (github.com) 文档地址&#xff1a;Generation (huggingface.co) 对于生成任务而言&#xff1a;text-decoder, text-to-text, speech-…

详解MySQL中的递归查询

MySQL中的递归查询主要通过WITH RECURSIVE语句来实现&#xff0c;这在处理具有层级关系或树形结构的数据时非常有用。下面将通过一个具体的例子来详细解释如何在MySQL中使用递归查询。 示例场景 假设我们有一个部门表&#xff08;departments&#xff09;&#xff0c;其中包含…

Zynq系列FPGA实现SDI编解码转SFP光口传输(光端机),基于GTX高速接口,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx-Kintex7上的应用 3、详细设计方案设计原理框图输入Sensor之-->OV5640摄像头输入Sensor之-->HDMIVDMA图像缓存RGB转BT1120GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBHDMI输…

Rust 通过 Deref trait 将智能指针当作常规引用处理

通过 Deref trait 将智能指针当作常规引用处理 实现 Deref trait 允许我们重载 解引用运算符&#xff08;dereference operator&#xff09;*&#xff08;与乘法运算符或通配符相区别&#xff09;。通过这种方式实现 Deref trait 的智能指针可以被当作常规引用来对待&#xff…

基于IDEA的Lombok插件安装及简单使用

lombok介绍 Lombok能以注解形式来简化java代码&#xff0c;提高开发效率。开发中经常需要写的javabean&#xff0c;都需要花时间去添加相应的getter/setter&#xff0c;也许还要去写构造器、equals等方法&#xff0c;而且需要维护。而Lombok能通过注解的方式&#xff0c;在编译…

Qt中文个数奇数时出现问号解决

Qt中文个数奇数时出现问号解决 目录 Qt中文个数奇数时出现问号解决问题背景问题场景解决方案 问题背景 最近在开发一个小工具&#xff0c;涉及到一些中文注释自动打印&#xff0c;于是摸索如何把代码里面的中文输出到csv文件中&#xff0c;出现了乱码&#xff0c;按照网上的攻…

供应链管理(SCM):如何在颜值和体验上发力

要在供应链管理系统&#xff08;SCM&#xff09;中在颜值和体验上发力&#xff0c;让用户感觉耳目一新&#xff0c;可以采取以下措施&#xff1a; 界面设计优化&#xff1a; 对供应链管理系统的界面进行优化&#xff0c;注重界面的美观、简洁和易用性。采用现代化的设计风格、…

Python酷库之旅-第三方库Pandas(026)

目录 一、用法精讲 65、pandas.bdate_range函数 65-1、语法 65-2、参数 65-3、功能 65-4、返回值 65-5、说明 65-6、用法 65-6-1、数据准备 65-6-2、代码示例 65-6-3、结果输出 66、pandas.period_range函数 66-1、语法 66-2、参数 66-3、功能 66-4、返回值 6…

Gooxi受邀参加第三届中国数据中心服务器与设备峰会

7月2-3日&#xff0c;第三届中国数据中心服务器与设备峰会在上海召开&#xff0c;作为国内最聚焦在服务器领域的专业峰会&#xff0c;吸引了来自全国的行业专家、服务器与机房设备厂家&#xff0c;企业IT用户&#xff0c;数据中心业主共同探讨AIGC时代下智算中心设备的设计之道…

【Linux】03.权限

一、权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以在 linux 系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情超级用户的命令提示符是“#”&#xff0c;普通用户的命…

Linux驱动开发-04LED灯驱动实验(直接操作寄存器)

一、Linux 下LED 灯驱动原理 Linux 下的任何外设驱动&#xff0c;最终都是要配置相应的硬件寄存器。驱动访问底层的硬件除了使用内存映射将物理地址空间转化为虚拟地址空间&#xff0c;去进行读写修改&#xff0c;还可以通过各种子系统函数去进行操作 1.1 地址映射 MMU 全称…

JavaWeb后端学习

Web&#xff1a;全球局域网&#xff0c;万维网&#xff0c;能通过浏览器访问的网站 Maven Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建Java项目的工具 作用&#xff1a; 依赖管理&#xff1a;方便快捷的管理项目以来的资源&#xff08;jar包&#xff09;&am…

vue2学习笔记5 - 表单类元素的单向数据绑定和双向数据绑定

前言 上一节我们学到&#xff0c;可以通过v-bind:指令&#xff0c;将标签体属性值通过js表达式绑定到vue实例中的某data上&#xff0c;读取该data数据&#xff0c;并通过vue模板中指定的页面元素&#xff0c;展示在页面上。 但是&#xff0c;我们在使用网页表单的时候&#x…

Ctrl+C、Ctrl+V、Ctrl+X 和 Ctrl+Z 的起源

注&#xff1a;机翻&#xff0c;未校对。 The Origins of CtrlC, CtrlV, CtrlX, and CtrlZ Explained We use them dozens of times a day: The CtrlZ, CtrlX, CtrlC, and CtrlV shortcuts that trigger Undo, Cut, Copy, and Paste. But where did they come from, and why do…

文件安全传输系统,如何保障信创环境下数据的安全传输?

文件安全传输系统是一套旨在保护数据在传输过程中的安全性和完整性的技术或解决方案。通常包括以下几个关键组件&#xff1a; 加密&#xff1a;使用强加密算法来确保文件在传输过程中不被未授权访问。 身份验证&#xff1a;确保只有授权用户才能访问或传输文件。 完整性校验…

怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询一、理解复杂排序规则和排序方向二、优化索引…

css - - - - - 去除图片默认的白色背景(混合模式 mix-blend-mode)

去除图片默认的白色背景&#xff08;mix-blend-mode&#xff09; 1. 需求描述2. 原图展示3. 原代码展示4. 使用混合模式(mix-blend-mode)5.修改后效果 1. 需求描述 图片含有白色地图&#xff0c;想要将其去掉 2. 原图展示 3. 原代码展示 <div><img src*****/> &…