您的位置:首页 > 编程语言 > C语言/C++

(一)JNI学习之C语言基础,基本数据类型

2017-08-03 10:35 555 查看
一、JNI的介绍

JNI:Java Native Interface(java本地接口),其实就是让java跟C/C++互调的过程的一个规范。

所以要掌握这项技术,我们就必须了解C/C++语言的基础知识,因为C++是对C的一些改进,我们这里就只介绍C语言。

我们要知道的是,C语言不像java或C++,它不是面向对象的,而是面向过程的,所以C语言是不存在类、对象之类的说法的,它只有数据类型、函数等。

大体知道这些,我们先一起了解下C语言的基本组成跟一些基本概念:

C语言的数据类型分为基本数据类型,构造类型,指针类型(基础并且重要),void类型(主要是用于方法的返回值)。

1、基本数据类型:


我们看到相比较java来讲,C整型里没有byte类型,而多了一个long long类型,C的字符型也是占一个字节,注意的是C中是没有boolean型的,我们知道在java中布尔值分true和false,代表真假,在C中0表示假,非零就是真。

学习什么语言一般都是从Hello World开始,我们这里也不例外啦。现在我们就来写一个C程序编译运行一下。

至于用什么开发工具,大家自己去下载哈。。。

#include<stdio.h>
int main(){
printf("Hello C");

}



编译运行之后的结果是上图这个样子的。

我们就简单说一下那几句C代码吧。第一句:#include<stdio.h>,其实是一个固定写法,stdio实际是standard input output的缩写,意思就是引入头文件。也就是我们要开发C程序要用到一些方法都是引用的这个头文件的,这就相当于在使用java时,我们的导包(import java.lang.*),已经很熟悉了。

然后我们定义了一个main方法,且该方法的返回值是int型,我们在这里再强调一下,就是C是面向过程的,没有java中所谓的类与对象,只有调用函数。

printf()也是一个现成的方法,我们用来直接用,而且该方法传入的是可变参数。

提示:最后看程序主函数中我们明明写着有int返回值,但是实际中我们没有retrun,发现编译没有报错, 运行通过了,实际上C编译器,在我们没有指定相应的返回值的时候,会随机给我们返回一个对应类型的值。这里我们说一下,对于方法的返回值,如果方法声明上有返回值而最后函数体中我们没有写返回,或者返回值类型与函数声明的类型不一样,程序只会报一个警告,依然是可以运行的。

还有一点是,当我们将该项目保存在一个路径下时,编译完成的时候会在该路径下生成一个可运行程序,就像java一样,把.java编译成.class文件,注意的是,在windows环境下生成的是一个.exe可执行程序,而将这个程序放到其他平台上的话是不可以运行的。

当我们点击运行这个.exe可执行程序的时候,我们发现程序一闪而过了,这是因为C程序运行之后如果没有设置的话是会自动销毁的。因此要想看到最终效果,我们可以在mian方法中加一行代码,变成这个样子,我们的在执行.exe程序时就能看到效果啦,如下代码:

#include<stdio.h> //导入头文件
int main(){
printf("Hello C");
//该方法是调用系统system中的方法
system("pause");
}

通过以上代码我们可以看出,我们可以在函数中调用系统的一些命令。

接下来我们来验证一下C语言基本数据类型的长度,为什么要研究这个,难道不是像java一样,这些基础的东西我们记住印在脑子里就行了吗。有道理,对于编程,逻辑思维很重要,但要想运用,我们不得不去记忆一些东西,对于C也一样,只不过是C有点特殊,对于它的基本数据类型,它的大小实际上是随着平台的不同有些时候是不一样的,不像是我们接触的java,在任何平台,它的int就是占4个字节。C由于系统平台不同,每个基本数据类型所占字节有可能不一样,我们文章一开始的那张导图只是符合C99标准的一个关于基本数据类型字节的定义。因此C也提供了相应的函数让我们来了解每个基本数据类型所占的字节长度,下面我们就通过代码来验证一下,看代码:

#include<stdio.h>
int main(){
short a = 1;
int b = 2;
long c = 3;
long long d = 4;
float e = 5.123;
double f = 6.1234;
char g = 'a';
printf("short类型的大小为:%d\n",sizeof(short));//我们可以直接传入一个基本数据类型关键字来进行大小检测
printf("short类型的大小为:%d\n",sizeof(a));//我们也可以通过传入已定义好的数据类型来进行检测
printf("int类型的大小为:%d\n",sizeof(int));
printf("long类型的大小为:%d\n",sizeof(long));
printf("long long类型的大小为:%d\n",sizeof(long long));
printf("float类型的大小为:%d\n",sizeof(float));
printf("double类型的大小为:%d\n",sizeof(double));
printf("char类型的大小为:%d\n",sizeof(char));
return 0;
}
最后输出结果为,如图:



代码中,我们只是简单的声明了几个不同数据类型的变量,然后输出打印其大小,就这么简单,其中sizeof()函数就是C提供的计算数据类型大小的方法。

需要注意的是,我们在执行输出的时候,我们发现printf()里面有一个是%d\n,其中\n我们就不用多解释了,就是个换行,而%d又是什么呢,我来解释一下,在java中我们往往输出一段字符串之类的只要用+拼接起来就好,上面我提到过这个 printf中的参数是可变参数,这里的输出是两个参数,要想输出第二个参数的值,我们首先需要在前面加一个“占位符”,也就是%d啦,不然你不给它占位,就是不写%d,程序编译运行都是没问题的,只不过对于第二个参数你没给它位置,它是不会有结果输出出来的,看代码,假如我把第一个输出的%d去掉,第一个short类型的值得大小是不能输出出来的,如图:



还有一个这里C中char只占一个字符,在java中我们是占2个字符或者更多的。C中的char是一定不能表示中文字符的,只有一些基本的,比如键盘上能展示的字母(大小写),一些特殊字符,还有转义字符等128个字符可以表示,像其他的,比如说汉子之类的,它在C中是用字符串的形式来表示的。

好了,了解了这些,我们这里再说一个概念,就是signed和unsigned关键字,通过单词意思,signed是指有符号表示的,unsigned是指无符号的,也就是signed表示有正负之分,unsigned表示无符号就是没有正负之分,只有大于等于零的。

好了,关于这些数据类型的打印格式化说明我这里不想赘述了:如想了解可参见别人的一篇博文,这里贴出地址:http://www.cnblogs.com/xiaobaizhu/articles/2783868.html

下面我们再举一个输入函数的例子,直接看代码了。

#include<stdio.h>
int main(){
int s;
printf("请输入内容:\n");
scanf("%d",&s);
printf("您输入的是:%d\n",s);
return 2;
}
其中scanf就是用于接收的函数,其中参数一,是从外边接收的数据的类型,参数二就是把这个接收到的数据赋值给哪个变量,&s是获取输入的int型数值的地址,&是取地址符号,当然在获取输入的时候也是需要用相应的类型格式化的占位符的。最后演示结果是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: