c语言笔记

jni开发

什么是jni
  java native interface(java本机接口)
为什么要使用jni
  需求

  特殊设备 机顶盒
  执行效率
  安全
  物联网
怎么使用jni
  java基础好   
  c功底好
c语言编程
java数据类型
 byte       1byte
 short       2byte
 int    4byte
 long    8byte
 float    4byte
 double    8byte
 boolean    1byte
 char      2byte
c的数据类型
    char
     int
     float, double, signed, unsigned, long, short and void
进制表示法
    c 和 java 都是一样
    16进制 0x
    8进制 0 
    十进制 
c 字符串
 通过字符指针或者字符数组表示
 char *str = "大放大";
 char str[] = {'','',''};
指针
地址就是指针 指针就是地址
所有类型的指针变量 长度都是4

int *p  // 声明指针变量
    *p  //取指针变量对应的值,取地址上的值
  2 * 3 // 做相乘的运算
什么类型的指针 只能指向该类型数据的地址
野指针: 没有给指针变量赋值
定义指针变量也给默认的初始化 0
凡是加了*的指针变量在运行的时候就是去找该指针的内容,这个内容可以是地址也可以是值
Object实例化顺序
1,先为对象属性分配空间,并按属性类型初始化默认值
2,父类属性的初始化
3,父类构造函数的执行
4,子类属性的初始化
5,子类构造函数执行
Java实例化顺序如图:
java实例化顺序.png
方法不能修改实际参数的值,因为方法在内存中是在栈中,栈的意义就是该函数执行完了就退出,那么这个方法里面申明的变量就会被回收,因此也就不能改变传递过来的值,若果传递的是数据的地址,那么方法中就可以获取这个地址然后在根据地址去修改其值.
总结:方法不能改变传递过里的值,但是可以改变传递过来 的地址所指向的值.
        方法时保存在内存中的栈去,方法执行完就退出了,因此在该方法中申明的变量也会本回收.
        若是用动态申请的方式为变量赋值,那么该变量是保存在内存中的堆中,堆里面的数据是不会被回收,只有程序调用回收的方法或是垃圾回收器对其回收.,栈的表示:如图
c内存.png
堆的表示:如图1,2
c内存分析.png
java内存.png
数组
数组名是表示数组第一个元素地址的常量
指针变量的运算
*p  p++  相当于 p + 1 (1 单位,是指针变量的类型的长度)

*& 相当于不存在 *&i <> i

 实际参数
 int *p   int p[4] 有区别
  sizeof(p) 4  sizeof(p) 计算数组占用的内存 16
 形式参数
  int *p   int p[] 没有区别
指针数组与数组指针:
指针数组就是指针的数组,也就是说该数组里面的存放的指针-------->(*p)[2].

数组指针就是数组的指针,就是说每一个指针指向一个数组的首地址--->*p[2],*的运算符低于[],因此对*p不打括号的话p就先和[]中的内容匹配在和*匹配,因此就叫数组指针

字符串

c 字符串是通过字符数组来表示 字符串是以'\0'来表示字符串结束


浅克隆和深克隆

浅克隆是指只克隆出数据的地址,克隆出来的变量依然指向原来的数据,也就是说真实的数据还是只有一份.

 深克隆是指先克隆出原数据的地址,再在该地址上克隆出元数据,也就是说数据被真实克隆出来啦,相同的数据在内存中有两份啦.


函数指针:

int mul(int a, int b)

{

    return a * b;    

}

int (*op)(int,int);//申明一个指针,只不过这个指针后面跟有参数,也可以写成int* op(int,int);

op = mul;//为这个函数指针赋值为mul函数的地址,因为函数名就是函数的地址

int res = (*op)(5,6);//然后根据申明的函数指针传递参数即可调用mul函数.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值