JNI之C语言简单回顾

一.C语言基本数据类型:
c语言中 char, int, float, double, signed, unsigned, long, short and void
// java 中的8大本数据类型和他们的长度
// byte 1 char 2 short 2 int 4 long 8 double 8 float 4 boolean 1

// 在c99标准的c语言.没有 byte 类型 没有boolean 类型
// 在c语言里面 0表示的是假 非0表示的是真
// sizeof(); 获取某种数据类型的长度 , 接受一个参数(数据类型)

// c语言中的char类型是1个字节 java里面char是两个字节
// c语言中的char的长度 和 java中的byte的长度相同 ,所以可以用 c 语言中的char类型 表示 java中的byte类型
// c语言中的int 和 java中的int在内存中的长度相同 所以java的int 和c语言中的int 可以互相代替使用.

// c语言中long类型是4个字节 java中的long类型是8个字节


二. C 语言的输入函数
//scanf();
// java 语言里面有一个数据类型 叫String 字符串
// c语言里面 是没有String类型
// c语言表示一个字符串 定义一个字符的数组
// 利用scanf %s 的方式 可以方便的从键盘获取一个字符串

三。 指针入门:
// 指针代表的就是一个内存地址. 内存地址 可以用一个指针来表示.
// 地址就是一块内存空间的编号,通过这个编号 我们可以使用以一块内存空间.

// 指针变量: 可以存放指针类型(内存地址数据)数据的变量 指针变量.
// 使用* 来表示指针变量.
// int* 代表的就是一个表示int类型数据地址的变量

补充*号的几种作用.
// 3*5 1.*号的第一种作用 代表的是相乘的操作.
// 2.在一个数据类型的后面 跟上一个*号 代表就是这种数据类型的指针变量
// 3. 在一个指针变量前面加上一个*号 代表的是 访问这个指针变量里面存放的地址里面存储的内容.
函数指针
int (*pf) ( int x, int y); // 定义一个函数的指针 这个函数 返回值为int 接受两个int类型的参数

四.指针使用的常见错误:
指针的常见错误一:


//指针变量的类型 要跟 存放数据的类型 必须要对应
// int类型的变量的地址 要用int*来表示.
// float类型变量的地址 要用float* 来表示.

指针的常见错误二:
int i = 5;
int* p ;
printf("*p=%d\n",*p); // 如果p变量没有进行初始化, 里面存放的是一个垃圾值 混乱值.
// *p 访问了一块不知道的内存 (野指针)

// 指针变量 未经赋值 ,不能使用.
// 如果修改一个野指针指向的内存空间,可能会出现严重的错误.

//window操作系统 提供了一些api 提升父进程的权限.

五: 指针的长度

//所有数据类型的指针长度 都是4个字节
//32位的操作系统, 要想表示一个地址 2的32次方个地址.
//指针类型的 作用主要就是在指针运算的时候 起作用. 在获取指针所指向的数据的时候 起作用.
六. 多级指针

七. 手动分配内存
栈内存会被系统自动回收,不能被手动回收
堆内存不会被系统自动回收,需要由程序员手动回收



八. 结构体,联合体和枚举,自定义类型
结构体:
struct Student //此写法为最标准写法
{
int age; // 4
float score; // 4
long id;// 4
char c; // 为了方便处理,也分配为4

//不同的编译器 处理的结果可能 不同
} ;


三种写法:

第一种
struct Student
{
int age;
float score;
char sex;
}

第二种
struct Student2
{
int age;
float score;
char sex;
} st2;

第三种
struct
{
int age;
float score;
char sex;
} st3

联合体
union {double d; long i; int k; char ii; } mix;

typeof给一个变量定义一个别名
<think>嗯,用户问学好了C语言能做什么。首先,我需要回顾C语言的特点和应用领域。C语言是面向过程的语言,接近硬件,执行效率高,所以常用于系统级开发。然后,我应该考虑用户可能的背景,可能是刚学习编程的新手,或者对编程感兴趣想了解C语言的实际应用的人。 接下来,我要列举C语言的主要应用场景。比如操作系统开发,像Unix、Linux都是用C写的。然后是嵌入式系统,单片机、物联网设备这些资源有限的环境需要高效的语言。接着是编译器、数据库、游戏引擎这些底层开发,C语言也很重要。还有高性能计算,比如科学计算和图形处理。此外,C语言作为基础,学习其他语言C++Java会更容易。 然后,我需要考虑用户可能的需求。他们可能想知道学完C语言后的职业方向,或者如何应用C语言技能。需要分点说明,结构清晰,让用户容易理解。同时,要避免使用专业术语过多,用通俗易懂的语言解释每个应用领域。 还要注意用户可能存在的误区,比如认为C语言已经过时,但实际上很多核心系统仍然依赖C语言。因此,需要强调C语言在底层开发中的不可替代性。另外,用户可能想知道学习C语言后的实际项目例子,可以举一些如开发小型操作系统、编写硬件驱动、游戏引擎优化等例子,增强说服力。 还要提醒用户,学好C语言后,可以更容易理解计算机的工作原理,比如内存管理、指针操作等,这对后续学习其他高级语言和深入计算机科学有很大帮助。最后,总结一下C语言的重要性,并鼓励用户坚持学习,打好基础。</think>学习C语言是计算机科学领域的重要基础,掌握它能为你打开多个技术方向的大门。以下是学好C语言后可以发展的领域及具体应用: --- ### 一、系统级开发 1. **操作系统开发** C语言是编写操作系统内核的首选语言,例如: - Unix、Linux内核的底层模块 - Windows内核的部分组件 - 实时操作系统(RTOS)如FreeRTOS 2. **嵌入式系统** 适合资源受限的硬件环境: - 单片机(如Arduino、STM32)程序开发 - 物联网设备(智能家居、传感器节点) - 汽车电子控制单元(ECU) --- ### 二、底层工具开发 1. **编译器与解释器** - 参与GCC、LLVM等编译器的开发 - 设计领域特定语言(DSL)的解析器 2. **数据库系统** - MySQL、SQLite等数据库内核优化 - 实现存储引擎或索引算法 --- ### 三、性能敏感型应用 1. **游戏引擎** - 物理引擎、渲染管线的底层优化(如Unity部分模块) - 高频交易系统 ```c // 示例:内存操作优化 void* memcpy_optimized(void* dest, const void* src, size_t n) { // 使用SIMD指令或汇编内联优化 } ``` 2. **科学计算** - 数值分析库(如BLAS、LAPACK) - 气象模拟、流体动力学计算 --- ### 四、硬件交互与驱动 1. **设备驱动开发** - 编写Linux内核模块 - 定制外设驱动(如显卡、USB控制器) 2. **协议栈实现** - TCP/IP协议栈开发 - 蓝牙、Zigbee等无线协议实现 --- ### 五、跨领域延伸能力 1. **学习其他语言的基石** - 理解C++的虚表机制、Rust的内存安全模型 - 掌握Java JNI、Python C扩展开发 2. **计算机体系结构理解** - 通过指针操作深入理解内存模型 - 实践缓存优化、CPU流水线调度 --- ### 六、实际项目方向建议 1. **入门级项目** - 实现内存分配器(malloc/free) - 开发简易Shell或文本编辑器 2. **进阶挑战** - 构建RTOS任务调度器 - 编写软渲染器(Software Renderer) --- ### 总结 C语言的价值不仅体现在直接应用上,更重要的是: - 培养对计算机资源的精细控制能力 - 建立扎实的调试与优化经验 - 为理解操作系统、编译原理等核心课程奠定基础 学好C语言后,你既可以选择深耕底层开发,也能快速扩展到其他技术领域,这种能力在物联网、自动驾驶、高性能计算等前沿领域尤为关键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值