JNI_day01
C语言简介
system()是提供C语言调用系统命令的函数
C语言基本数据类型
C语言中的整数类型:char/short/int/long
C中使用ASCII保存字符,所以char所占用的字节数为1
Java中使用Unicode编码,char所占的字节数为2
C中long类型在32位操作系统中占用4个字节,在64为操作系统中占用8个字节
Java中long类型默认占用8个字节
sizeof()是运算符,用来计算一个类型占的字节数,如果括号内是变量,则计算的是该变量所对应数据类型所占的字节数
signed/unsigned:用来修饰整数类型,表示有符号/无符号,缺省为signed有符号类型,加上该关键字不会影响整数类型所占的字节数
C语言中没有boolean类型,可以使用unsigned char代替
C语言中的float/double类型和Java中的float/double类型所占字节数相同
float:4个字节,4bytes
double:8个字节,8bytes
C语言输入输出函数
都需要包含头文件:stdio.h
格式化输出函数:printf(f代表format)
输出整数:
%d 十进制有符号 int
%u 十进制无符号 unsigned int
%o 八进制无符号 unsigned int
%x 十六进制无符号 unsigned int
%ld 输出long类型
%hd 输出short类型
在%o和%x中间加#,可以输出前导,八进制自动加0,十六进制自动加0x
输出字符:
%c 输出一个字符
%s 输出一个字符串,即若干个字符
输出长整形和浮点数:
%f 输出float类型
%lf 输出double类型
输出变量的内存地址:
%p
备注:C语言中要想输出关键字符,需要重复该字符即可,例如输出%d,使用printf("%%d")
输入函数:
输入普通数据:
scanf("%d",&i); // &i告诉scanf输入的数据存放在哪里,取出变量i的内存地址,并将数据保存到那块内存空间中
输入字符串的写法:
char buf[10];//字符数组,可以保存字符串 '\0'作为字符串的结束标志 默认占一个长度,所以buf[10]中最多保存9个输入的字符
printf("输入字符串:");
scanf("%s",buf);//数组名代表数组首元素首地址 buf[0] &buf[0] <=> buf
printf("buf:%s\n",buf);
备注:数组名代表数组首元素的首地址,等价于&buf[0]
C语言中的指针
号的作用:
1.乘法运算 ij
2.定义指针变量 int *p; *只是为了区分变量类型,不是普通变量,等价于(int *)p;
3.取对象云算法 *p
指针的指向
如果一个指针变量保存了一个对应类型变量的首地址,指针变量指向这个变量,可以用指针运算符*访问指向变量
指针变量在不影响理解时,都称为指针
指针的误用
1.指针没有合法的指向(野指针),初始值NULL
2.混用指向不同类型的指针,如果真要把不同类型的地址赋给指针变量,需要强转
指针的两个关键属性:地址和(指向)类型
C语言中的引用传递
include <stdio.h>
void swap(int *pa, int *pb) {
printf("swap start\n");
printf("a = %p, b = %p\n", pa, pb);
printf("a = %p, b = %p\n", &pa, &pb);
int temp = 0;
temp = *pa;
*pa = *pb;
*pb = temp;
printf("a = %p, b = %p\n", pa, pb);
printf("a = %p, b = %p\n", &pa, &pb);
printf("swap end\n");
}
int main() {
int a = 10;
int b = 20;
printf("a = %d, b = %d\n", a, b);
printf("a = %p, b = %p\n", &a, &b);
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
printf("a = %p, b = %p\n", &a, &b);
return 0;
}
输出结果:
结果分析:
通过操作内存地址,交换指向内存的指针,从而达到交换数据的目的
操作内存地址,相当于操作变量
Java中的引用传递,类似于C中的地址传递
通过调用Java中的函数,传递一个对象作为参数,在函数执行过程中,可以修改对象内部的属性数据,在函数执行完毕以后,再读取该数据,就能实现Java的引用传递
关于C字符串存储和操作
C语言中没有字符串类型,需要用字符数组来表示字符串
char buf[10];字符数组用来保存字符串
char *p = buf;字符指针可以保存字符串首地址,从而找到并处理字符串,长度是根据字符串的结束标志'\0'来判断
运算符sizeof()只能获取字符数组所占用的内存空间,而不能获取字符数组中字符串的长度
可以使用string.h库中的函数strlen()来获取字符数组中字符串的长度,获取的长度不包括'\0'
局部变量存储在堆空间,用的时候需要申请,用完以后自动释放
指针变量运算
指针变量加减一个整数n,指针向高地址或低地址移动n个对象,要求在一段连续的内存空间上移动
数组
C语言的编译器不会检查数组的下标越界,需要特别注意,历史上有很多缓冲区越界带来的漏洞
数组首地址和数组元素首地址的区别
1.它们的地址值是相等的;
2.第1个元素的地址如果是p,则p+1就是第2个元素的地址;
3.数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。
指针和数组的关系
a[i] <=> *(a + i) <=> *(p + i) <=> p[i]
C语言运行时的内存分配
内存分为四个区段:代码段、静态区、堆区、栈区
代码段(从低地址向高地址扩展)
code/text
存放程序的二进制指令
静态区(从低地址向高地址扩展)
特点:定义一次,多次使用,如果未赋初值,初值会自动为0,生命周期和程序运行的时长相同
bss:
存放未赋初值的全局变量
static修饰的局部变量
data:
存放已赋初值的全局变量
static修饰的局部变量
堆区(从低地址向高地址扩展)
特点:手动申请,手动释放,使用时需导入stdlib.h头文件
使用malloc、free、realloc函数进行申请、释放和重新申请
否则可能会造成内存溢出
栈区(从高地址向低地址扩展)
特点:用时申请,用完释放,如果不赋初值,初值随机
存放的是函数内定义的变量,生命周期短
JNI_day01的更多相关文章
随机推荐
- 微服务框架 ketchup 介绍
1.背景 在ketchup诞生之前.期间也是用surging开发了两个项目.奈何surging没有文档,升级之后,只能从头在读一遍源码,了解新功能,会消耗大量的时间.商业化也使一些 想学习微服务的人望 ...
- elasticsearch 小总结
elasticsearch 小总结 0. 起因 距离初次写关于es的文章 https://blog.csdn.net/aca_jingru/article/details/44488703 已经过去4 ...
- 【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- Error: ER_BAD_FIELD_ERROR: Unknown column 'xxx' in 'where clause'
node中调用mysql模块读写时候,如果直接插入字符串: connection.query('SELECT * from users WHERE name=' + data.name , call ...
- 9.4 Go 数据格式
9.4 Go 数据格式 1.1. msgpack格式 官方msgpack官网用一句话总结: It’s like JSON. but fast and small. 简单来讲,它的数据格式与json类似 ...
- 你真的了解负载均衡中间件nginx吗?
前言 nginx可所谓是如今最好用的软件级别的负载均衡了.通过nginx的高性能,并发能力强,占用内存下的特点,可以搭建高性能的代理服务.同时nginx还能作为web服务器,反向代理,动静分离服务器. ...
- Htop/Glances/Dstat性能测试系统监控工具领域的瑞士军刀
原文链接:https://mp.weixin.qq.com/s/TvfzIy4uXHPOFQ1h5Q4KWg 建议点击原文链接查看 续上篇分享的[性能测试工具],今天整理了常用的系统监控工具,当然有特 ...
- 基本sql语法
SQL 语句主要可以划分为以下 3 个类别. DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义.常用 ...
- 使用webstorm 搭建 vue 开发环境
一.首先安装 node.js 安装成功后在cmd里面使用:node -v 命令查看安装是否成功 下载链接: 链接:https://pan.baidu.com/s/1CL9J4Ryp3sL0zPYKJy ...
- 0512String类
String类 2. String类 2.1 字符串类型概述 又爱又恨!!! 爱: 字符串基本上就是数据的保存,传输,处理非常重要的一种手段. 恨: 解析过程非常烦人,需要掌握熟记很多方法,同时需要有 ...