0813,引用,函数重载,内存布局叭叭叭

news2024/9/21 18:53:11


是我4句话5个ERROR,阿巴阿巴

001_arrpointer.cc

#include <iostream>
using std::cout;
using std::endl;

void test(){
    int a[5]={1,2,3,4,5};

    int (*p)[5]=&a;
    cout<<p<<endl;
    cout<<p+1<<endl;

    int *pp=(int*)(&a+1);
    //第二个数组的首地址(*int)[5],强转成int*
    //变成第二个数组的首元素的地址
    cout<<*(a+1)<<"  "<<*(pp-1)<<endl;
}

int main(void)
{
    test();
    return 0;
}

01,引用

reference.cc

#include <iostream>
using std::cout;
using std::endl;

void test(){
    int num=100;
    int & ref=num;
    //& 不代表取值符,代表引用符号
    cout<<ref<<endl;
    ref=1000000;
    cout<<ref<<endl;

    int num2=200;
    ref=num2;//赋值

    int *p=&num;

    cout<<&num<<endl;
    cout<<&ref<<endl;//底层 cosnt poiter
    cout<<&p<<endl;
    cout<<&num2<<endl;

    /* 特殊的常量指针,无法对其进行访问,只能间接访问到指向的对象/地址 */
    cout<<endl;
    const int & ref1=num;
    /* ref1=num2; */
    /* 不希望通过引用改变其本体,const */
}

int main(void)
{
    test();
    return 0;
}

swap.cc

#include <iostream>
using std::cout;
using std::endl;

void swap(int x,int y){
}

void swap1(int *px,int *py){
    int z=*px;
    *px=*py;
    *py=z;
}

//int & a=x,int & b=y
void swap2(int & a,int &b){
    int temp=a;
    a=b;
    b=temp;
}


int num=100;
int func1(){
    return num; //执行return 语句的时候会发生copy
}
int & func2(){
//如果某个函数需要让其返回值是某个变量本身
//那么可以在函数返回类型中加上&
    return num; //no copy 
}
#if 0
int & func(){
    int num=1;
    return num;
    //num被销毁,悬空引用
    //确保引用绑定的本体的生命周期比函数更长
}
#endif
int & func4(){
    int *p=new int(10);
    return *p; //no delete
}

void test(){
    int x=6,y=90;
    swap2(x,y);
    cout<<"x="<<x<<"  y="<<y<<endl;
    swap1(&x,&y);
    cout<<"x="<<x<<"  y="<<y<<endl;

    cout<<endl;
    cout<<&num<<endl;
    cout<<func1()<<endl; //临时变量
    cout<<func2()<<endl;  //绑定到num的引用
    cout<<&func2()<<endl;//对本体进行访问

    int & ref=func4();
    cout<<ref<<endl;
    delete &ref;
    //回收
}

int main(void)
{
    test();
    return 0;
}

02,强制转换

typecast.cc           靓仔迷惑

#include <iostream>
#include <stdlib.h>
using std::cout;
using std::endl;

void test(){
    int *p=(int*)malloc(sizeof(int));
    *p=100;
    free(p);
    p=nullptr;

    int *p1=static_cast<int*>(malloc(sizeof(int)));
    *p1=100;
    free(p1);
    p1=nullptr;

    cout<<endl;
    const int num=10;
    /* int a=const_cast<int>(num); */
    /* int a=const_cast<int>(10); */

    //把能const int -->int
    const int *pp=&num;
    int *p2=const_cast<int*>(pp);
    //作用于 const引用和指向常量的指针
    *p2=100;
    cout<<*p2<<endl; //100
    cout<<num<<endl; //10
    cout<<p2<<endl;
    cout<<&num<<endl;

}

int main(void)
{
    test();
    return 0;
}

03,函数重载  04,默认参数

overload.cc

#include <iostream>
using std::cout;
using std::endl;

//函数重载
//编译器的名字改变机制将函数的名字改编成了与参数信息相关的名字
int add(int x,int y){cout<<"int+int"<<" \t\t"; return x+y;}
int add(int x,int y,int z){cout<<"int+int+int"<<" \t\t"; return x+y+z;}
double add(double x,double y){cout<<"double+double"<<" \t\t"; return x+y;}
double add(int x,double y){cout<<"int+double"<<" \t\t"; return x+y;}
double add(double x,int y){cout<<"double+int"<<" \t\t"; return x+y;}
/* void  add(int x,double y){cout<<"int+double"<<" "; } */


//用C的方式编译函数
//不可以进行函数重载
extern "C"{
int func(int x,int y){cout<<"int+int"<<" "; return x+y;}
/* int func(int x,int y,int z){cout<<"int+int+int"<<" "; return x+y+z;} */
int func01(int x,int y,int z){cout<<"int+int+int"<<" "; return x+y+z;}
}


/* void ffunc(int x,int y){ */
/*     cout<<"x="<<x<<"\t\t"; */
/*     cout<<"y="<<y<<endl; */
/* } */
/* void ffunc(int x,int y=6){ */
/*     cout<<"x="<<x<<"\t\t"; */
/*     cout<<"y="<<y<<endl; */
/* }//备胎 */
void ffunc(int x=9090,int y=6){
    cout<<"x="<<x<<"\t\t";
    cout<<"y="<<y<<endl;
}//备胎

/* void ff(int x=10086,int y); */
void ff(int x,int y=10086);
//实现与声明分离,建议默认值给声明
//顺序默认从右到左


int dd(int x,int y,int z=100){cout<<"int+int+int"<<" \t\t"; return x+y+z;}
int dd(int x,int y){cout<<"int+int"<<" \t\t"; return x+y;}
//函数重载+默认值,可能会引发冲突

void test(){
    cout<<add(1,2)<<endl;
    cout<<add(1,2,3)<<endl;
    cout<<add(1.5,2.5)<<endl;
    cout<<add(1,2.5)<<endl;
    cout<<add(1.3333,2)<<endl;
    cout<<add(1,2.77)<<endl;

    //缺省调用
    ffunc(10,9);
    ffunc(2);
    ffunc();

    ff(10,9);
    ff(10);

    cout<<dd(10,10,10)<<endl;
    /* dd(10,10); */
}

void ff(int x,int y){
    cout<<"x="<<x<<"\t\t";
    cout<<"y="<<y<<endl;
}//备胎


int main(void)
{
    test();
    return 0;
}

05,BOOL类型

bool.cc

#include <iostream>
using std::cout;
using std::endl;

void test(){
    int x=true;
    int y=false;
    cout<<x<<endl;
    cout<<y<<endl;

    bool b1=1;
    bool b2=100;
    bool b3=0;
    bool b4=-1;
    cout<<b1<<endl;
    cout<<b2<<endl;
    cout<<b3<<endl;
    cout<<b4<<endl;
    // 1 1 0 1
    if(b4){cout<<"i love xixi"<<endl;}
    cout<<sizeof(b4)<<endl;
}

int main(void)
{
    test();
    return 0;
}

06,INLINE函数

inline.cc   头文件需要声明和定义写一起

#include <iostream>
using std::cout;
using std::endl;

//宏定义函数,不会检查,只替换
#define MAX(a,b) (a)>(b)?(a):(b)
#define MIN(a,b) {(a)>(b)?(a):(b)}

//内联函数
//建议替换,(可能不采纳)
//更高级的替换,有安全检查机制
inline int max(int x,int y){
    return x>y?x:y; 
}

void test(){
    /* cout<<MAX(20,10)+20<<endl; */
    /* cout<<MAX(10,20)+20<<endl; */
    /* cout<<MIN(20,10)+20<<endl; */
    /* cout<<MIN(10,20)+20<<endl; */
    //不是哥们,4句话 5个error
    
    cout<<max(20,10)+20<<endl;
    cout<<max(10,20)+20<<endl;
}

int main(void)
{
    test();
    return 0;
}

07,异常处理

catch.cc

#include <iostream>
using std::cout;
using std::endl;

double division(double x,double y){
    if(y==0){
        throw "0 been division";
    }else if(x==0){
        throw 1.1;
    }

    return x/y;
}
void test(){
    try{
        double x=0,y=100;
        cout<<division(x,y)<<endl;
        cout<<"over"<<endl;
    }
    catch(const char*){
        /* cout<<msg<<endl; */
        cout<<" errr!!!!!"<<endl;}
    catch(double a){cout<<a<<endl;}
    cout<<"i love xixi"<<endl;
}

int main(void)
{
    test();
    return 0;
}

08,内存布局

#include <iostream>
using std::cout;
using std::endl;

const int xixi=90;
int gNum=1;
const int gcNum=20;

void test(){
    int num=100;
    int num2=200;
    const int xixi1=100;
    cout<<&num<<endl;
    cout<<&num2<<endl;
    cout<<endl;
    cout<<&xixi<<endl;  //全局常量:文字常量区
    cout<<&xixi1<<endl; //局部常量 :staic

    cout<<endl;
    int *p=new int(20);
    int *p1=new int(30);
    cout<<p<<endl;
    cout<<p1<<endl;

    cout<<endl;
    cout<<&gNum<<endl;
    static int sNum=18;
    cout<<&sNum<<endl;
    
    cout<<endl;
    const char* pstr="i love xixi";
    cout<<pstr<<endl;
    printf("%p\n",pstr);
    //输出流运算符对char*的运算重载效果
    const int aaa=90909;
    /* int *const  pp=&aaa; */
    const int * pp=&aaa;
    cout<<pp<<endl;
    
    cout<<endl;
    cout<<static_cast<void*>(const_cast<char*>(pstr))<<endl;
    cout<<"&gcNum"<<&gcNum<<endl;

    cout<<endl;
    printf("%p\n",&test);
}

int main(void)
{
    test();
    cout<<endl;
    printf("%p\n",&main);
    return 0;
}

09,C风格字符串

#include <iostream>
#include <cstring>
using std::cout;
using std::endl;

void test(){
    char arr[3]={'i','s','\0'};
    char arr1[]={'a','q'};
    char arr2[]="i love xixi";

    cout<<arr<<endl;
    cout<<arr1<<endl;
    cout<<arr2<<endl;

    printf("%p\n",arr);
    printf("%p\n",arr1);
    printf("%p\n",arr2);
/* 0x7fff73681fd9 */
/* 0x7fff73681fd7 */
/* 0x7fff73681fdc */
//char * arr te shu xiao guo1

    const char* pp="i love xixi pp";
    /* char* pp="hello"; */
    /* pp[0]='H'; */
    //段错误
    cout<<pp<<endl;

    cout<<endl;
    const char* ps="i love xixxi ps";
    char* pssss=new char[strlen(ps)+1]();
    strcpy(pssss,ps);

    const char* pppp=new char[10]{'h','e','l','l','o'};
    cout<<pppp<<endl;
    cout<<pssss<<endl;

    delete [] pssss;
    pssss=nullptr;

    delete [] pppp;
    pppp=nullptr;

}

int main(void)
{
    test();
    return 0;
}

10,作业

01,在( )情况下适宜采用inline定义内联函数。(多选题)

  • A  函数体含有循环语句

  • B  函数体含有递归语句

  • C  函数代码少、频繁调用

  • D  函数代码多、不常调用

  • E  需要加快程序执行速度

02,写出下面程序的运行结果。   10/26  26/10  10/26  25/11

#include <iostream>

using std::cout;
using std::endl;

void f2(int &x, int &y)
{
int z = x;
x = y;
y = z;
}

void f3(int *x, int *y)
{
int z = *x;
*x = *y;
*y = z;
}

int main()
{
int x, y;
x = 10; y = 26;
cout << "x, y = " << x << ", " << y << endl;
f2(x, y);
cout << "x, y = " << x << ", " << y << endl;
f3(&x, &y);
cout << "x, y = " << x << ", " << y << endl;
x++; // ++x
y--;
f2(y, x);
cout << "x, y = " << x << ", " << y << endl;
return 0;
}

03,C++内存布局是怎样的?可以具体阐述一下么?

1,栈区
操作系统控制,高地址--》低地址(编译器优化显得低地址--》高地址)

2,堆区
程序员分配,低地址--》高地址,和栈区没有明确的界限

3,全局/静态区
读写段(数据段)存全局、静态变量

4,文字常量区
只读段,存程序中直接使用的文字常量和全局常量

5,程序代码区
只读段,存放函数体的二进制代码

04,在自定义命名空间MySpace中定义add函数,能够实现多个数据的加法(两个int、一个double一个int、一个int一个double、三个int),并跨模块调用add函数,使用using声明机制验证其功能。还可以适当给函数参数赋默认值,进行缺省调用的练习。

#include <iostream>
using std::cout;
using std::endl;

//函数重载
//编译器的名字改变机制将函数的名字改编成了与参数信息相关的名字
int add(int x,int y){cout<<"int+int"<<" \t\t"; return x+y;}
int add(int x,int y,int z){cout<<"int+int+int"<<" \t\t"; return x+y+z;}
double add(double x,double y){cout<<"double+double"<<" \t\t"; return x+y;}
double add(int x,double y){cout<<"int+double"<<" \t\t"; return x+y;}
double add(double x,int y){cout<<"double+int"<<" \t\t"; return x+y;}
/* void  add(int x,double y){cout<<"int+double"<<" "; } */


//用C的方式编译函数
//不可以进行函数重载
extern "C"{
int func(int x,int y){cout<<"int+int"<<" "; return x+y;}
/* int func(int x,int y,int z){cout<<"int+int+int"<<" "; return x+y+z;} */
int func01(int x,int y,int z){cout<<"int+int+int"<<" "; return x+y+z;}
}


/* void ffunc(int x,int y){ */
/*     cout<<"x="<<x<<"\t\t"; */
/*     cout<<"y="<<y<<endl; */
/* } */
/* void ffunc(int x,int y=6){ */
/*     cout<<"x="<<x<<"\t\t"; */
/*     cout<<"y="<<y<<endl; */
/* }//备胎 */
void ffunc(int x=9090,int y=6){
    cout<<"x="<<x<<"\t\t";
    cout<<"y="<<y<<endl;
}//备胎

/* void ff(int x=10086,int y); */
void ff(int x,int y=10086);
//实现与声明分离,建议默认值给声明
//顺序默认从右到左


int dd(int x,int y,int z=100){cout<<"int+int+int"<<" \t\t"; return x+y+z;}
int dd(int x,int y){cout<<"int+int"<<" \t\t"; return x+y;}
//函数重载+默认值,可能会引发冲突

/* void test(){ */
/*     cout<<add(1,2)<<endl; */
/*     cout<<add(1,2,3)<<endl; */
/*     cout<<add(1.5,2.5)<<endl; */
/*     cout<<add(1,2.5)<<endl; */
/*     cout<<add(1.3333,2)<<endl; */
/*     cout<<add(1,2.77)<<endl; */

/*     //缺省调用 */
/*     ffunc(10,9); */
/*     ffunc(2); */
/*     ffunc(); */

/*     ff(10,9); */
/*     ff(10); */

/*     cout<<dd(10,10,10)<<endl; */
/*     /1* dd(10,10); *1/ */
/* } */

void ff(int x,int y){
    cout<<"x="<<x<<"\t\t";
    cout<<"y="<<y<<endl;
}//备胎


/* int main(void) */
/* { */
/*     test(); */
/*     return 0; */
/* } */

#include <iostream>
using std::cout;
using std::endl;

extern int add(int,int);
extern double add(double,double);
void test0001(){
    cout<<add(2,5)<<endl;
    cout<<add(2.8989,5.789)<<endl;
}
int main(){
    test0001();
    return 0;
}

05,简述C++中引用与指针的联系与区别

联系:

1,都有地址的概念

2,引用的底层是靠指针实现的,可以视为一个受限制的指针

区别:

1,引用必须初始化,指针可以不初始化

2,引用不能修改绑定,指针可以

3,在代码层面,对引用本体取地址取到的是变量本体的地址,对指针取址取到的是指针变量的地址

06,什么是函数重载?其实现原理是什么?如何进行CC++的混合编程?

函数重载:C++允许函数名相同,参数类型、数量不同的函数在同一作用域同时出现

实现原理:名字改编(函数名称相同的时候,会根据参数的类型、顺序、个数进行改编,改变之后的函数名与函数信息相关

混合编程:extern "C" {}

07,什么是inline函数?inline与带参数的宏定义之间的区别是什么?

1,在函数最前面有inline关键字的声明函数
加上关键字,就是对编译器提出了内联的建议,如果建议通过,进行内联展开(即用用函数定义体 替代函数调用语句,该行为发生在编译阶段而非程序运行阶段

2,
宏函数: 优点(没有函数开销) 缺点(没有类型检查,安全隐患)
内联函数:不会增加开销,存在类型检查

08,引用作为函数返回值时要注意什么?如果函数返回值是绑定到堆上的变量的引用,应该如何安全地进行使用?

1,确保引用对象的生命周期比函数生命周期长

2,如果是堆上的内存,要避免内存泄漏(使用引用接收函数返回值,可以安全的访问堆上的变量,避免重复申请导致的内存泄露)

// 错误:返回局部变量的引用
int& getLocalValue() {
    int localValue = 10;
    return localValue;  // localValue 的生命周期结束后,引用变成悬空引用
}

// 正确:返回堆上分配的对象的引用
int* getHeapValue() {
    int* heapValue = new int(10);
    return heapValue;  // 调用者负责释放内存
}

int main() {
    int* value = getHeapValue();
    // 使用 value
    delete value;  // 释放内存
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode + cmake + ninja + ARMCC 配置stm32开发环境(构建篇)

vscode cmake ninja ARMCC 配置stm32开发环境&#xff08;构建篇&#xff09; 1. 前置环境 1.1 cmake安装 从CMake官网上下载CMake安装包进行安装CMake。CMake官网 安装完成之后&#xff0c;使用cmd查看cmake是否添加进入环境变量。 1.2 LLVM套件安装 从LLVM的github…

K8S上安装LongHorn(分布式块存储) --use

要在 Kubernetes上安装 LongHorn&#xff0c;您可以按照以下步骤进行操作&#xff1a; 一、准备工作 参考 官网教程将LongHorn只部署在k8s-worker5节点上。https://github.com/longhorn/longhorn 安装要求 Each node in the Kubernetes cluster where Longhorn is installe…

Java虚拟机:运行时内存结构

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 035 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

人口老龄化社区服务与管理平台

TOC springboot136人口老龄化社区服务与管理平台 系统概述 1.1 研究背景 人口老龄化社区服务与管理平台是面向居家老人用户、社区的系统与信息平台&#xff0c;并在此基础上提供实时、快捷、高效、低成本的&#xff0c;物联化、互联化、智能化的人口老龄化社区服务服务。 …

CTFHub~SQL注入超简单详细教程

0x01整数型注入 # 本题告诉我们是整数型&#xff0c;所以就很容易了# 判断字段数量 1 order by 2# 判断回显点 -1 union select 1,2# 查询全部数据库名 -1 union select 1,group_concat(schema_name) from information_schema.schemata# 判断数据库中的表名 -1 union select 1…

Python采集爬取cnmo网站手机数据案例实现

前言 本例子利用Python爬虫爬取cnmo网站2020年至2022年11月的手机数据&#xff0c;并对其进行数据处理和可视化分析。 1、效果展示 如下如最终我们将得到一个包含手机型号、颜色、内存、价格及购买链接等的excel表以及dataframe和可视化效果。 2、需要用到的库 import panda…

【OpenCV——python】形态学变换 颜色空间 颜色替换 掩膜 旋转

形态学变换 形态学变换一般是处理二值图的腐蚀和膨胀操作&#xff0c;输入二值化图像和核&#xff0c;对图像进行类似卷积的操作 核 核是一定大小的区域&#xff0c;在原图中进行滑动计算 腐蚀erode 腐蚀过程 核在图像上滑动&#xff0c;对应位置相乘&#xff0c;最小值作为核…

孙宇晨领航波场TRON:引领数字资产迈向崭新纪元

​ 在风起云涌的数字资产领域&#xff0c;孙宇晨这个名字始终与创新、突破和引领紧密相连。作为波场TRON的创始人&#xff0c;他不仅是一位远见卓识的领导者&#xff0c;更是推动数字资产迈向新纪元的坚实力量。 自波场TRON诞生以来&#xff0c;孙宇晨便以其敏锐的洞察力…

MongoDB教程

目录 介绍启动命令命令行操作常用命令总结MongoDB Compass 介绍 MongoDB是一个基于分布式文件存储的开源数据库系统&#xff0c;由C语言编写&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档&#xff0c;数据结构由键值对组成&…

轮式遥控无人侦察车技术详解

轮式遥控无人侦察车&#xff08;Wheeled Remote-Controlled Unmanned Ground Vehicle, RCUGV&#xff09;作为现代战场及复杂环境侦察作业的重要工具&#xff0c;以其灵活性高、机动性强、风险低等优势&#xff0c;在军事侦察、灾害评估、环境监测等多个领域发挥着不可替代的作…

Cesium 加载高斯泼溅(Gaussian Splatting)模型

Cesium 加载高斯泼溅&#xff08;Gaussian Splatting&#xff09;模型 高斯泼溅&#xff08;Gaussian Splatting&#xff09; 高斯泼溅是一种革命性的 3D 重建新方法&#xff0c;它试图解决其他方法存在的一些问题&#xff0c;例如处理时间长。对于这种方法&#xff0c;他们的…

成都云飞浩容文化传媒有限公司是做什么的?

在数字经济的浪潮中&#xff0c;电商行业如日中天&#xff0c;成为推动经济发展的重要引擎。在这场没有硝烟的商战中&#xff0c;如何脱颖而出&#xff0c;实现品牌与销量的双重飞跃&#xff1f;成都云飞浩容文化传媒有限公司&#xff0c;作为电商服务领域的佼佼者&#xff0c;…

JavaHadoop白云白云图书管理系统---附源码19272

目 录 摘要 Abstract 1 绪论 1.1 研究背景及意义 1.2国内外研究现状 1.3 论文结构与章节安排 2 白云图书管理系统系统分析 2.1 系统可行性分析 3.2.1 技术可行性 3.2.2 经济可行性 3.2.3 操作可行性 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 …

【Web】LIT CTF 2024 题解(全)

目录 anti-inspect jwt-1 jwt-2 traversed kirbytime scrainbow anti-inspect 因为一直while true&#xff0c;网页会卡死无法访问 const flag "LITCTF{your_%cfOund_teh_fIg_94932}";console.log(flag,"background-color: darkblue; color: white; f…

Nginx异常关闭之中了挖矿病毒kswapd0

问题描述&#xff1a;系统突然无法访问了&#xff0c;登录服务器看了一下是因为Nginx服务关闭&#xff0c;重启后过了几天仍然异常关闭 系统&#xff1a;CentOS 7&#xff0c;Nginx 1.20 尝试解决过程&#xff1a;1、查询nginx/logs/error.log、系统日志&#xff0c;都没有查…

Ubuntu18.04 配置EtherCAT主站IGH SOEM

IGH IGH 是开源的EtherCAT 主站软件 一、安装依赖 sudo apt update sudo apt install build-essential linux-headers-$(uname -r) mercurial autoconf libtool 也不知道安装的完全不完全 uname -r 可以查看内核&#xff0c;我安装的ubuntu18.04的内核版本是 5.4.0-84-gen…

Robotics: Aerial Robotics 部分笔记——Week2(1) 运动学

Week 2.1 g ( q ) g(q) g(q) is called g of q.Rotation matrix R R R: P ′ R P PRP P′RP。旋转矩阵都是正交的&#xff08;orthogonal&#xff09;&#xff0c;即 R T R R R T I R^TRRR^TI RTRRRTI&#xff1b;行列式为1 d e t R 1 det R 1 detR1&#xff1b;且旋转矩…

【JAVA】阿里巴巴的Arthas:Java应用诊断的利器

文章目录 引言1. Arthas概述2. 安装与配置3. 基本使用4. 业务开发示例5. 高级功能6. 实践经验与案例分析7. 结论8. 附录 更多相关内容可查看 引言 在现代软件开发中&#xff0c;Java作为一种广泛使用的编程语言&#xff0c;承担着大量企业级应用的开发任务。然而&#xff0c;随…

Linux驱动入门实验班——Hello驱动(后附百问网课程视频链接)

目录 1.如何编写驱动程序 2.编写驱动程序 ①确定主设备号 register_chrdev函数 ②file_operations结构体 ③实现对应的函数&#xff0c;填入结构体 copy_from_user函数 copy_to_user函数 ④注册驱动程序 方式一 方式二 ⑤入口函数 ⑥出口函数 ⑦提供设备信息&#x…

Type-C接口取电芯片-LDR6500

取电芯片&#xff0c;特别是针对Type-C接口的取电芯片&#xff0c;如LDR6328系列&#xff0c;是近年来电子设备领域的一个重要技术组件。这些芯片通过智能协议控制&#xff0c;实现高效、安全的充电过程&#xff0c;并广泛应用于智能手机、平板电脑、笔记本电脑、小家电等各类需…