Android JNI系列(1)——c语言基础(数据类型和指针)

    本博客的原创文章,都是本人平时学习所做的笔记,不做商业用途,如有侵犯您的知识产权和版权问题,请通知本人,本人会即时做出处理删除文章。

  • 开发工具

        开发工具vs2013下载地址:https://pan.baidu.com/s/1LIMesT9wcWwodFvqRt8awg 密码: wim2

        安装一直下一步就可以,30天试用期,也可以输入BWG7X-J98B3-W34RT-33B3R-JVYW9密钥激活。

  • Hello Word

        依照惯例,学习一门语言的开始就是Hello Word!当我们第一次开始学习编程的时候一定写过,所以我们也以Hello Word开始吧。

        首先,点开vs->文件->新建项目->visual c++->空项目->右击资源文件->添加->新建项->c++文件->修改后缀为.c和文件名字,然后就可以开始编写代码了。

//引入头文件 只有函数的声明 编译时会找到函数的实现
#include<stdio.h>
void main(){
        //打印
	printf("hello word\n");
        //使命令窗口悬停  也可以使用getchar()方法
	system("pause");
}

        上面这段代码会在控制台中打印出"Hello word",第一个c程序运行成功。

  • 数据类型:int、short、long、float、double、char

        在c语言中变量输出打印是需要占位符,下面列举出各个数据类型对应占位符和字节数。C语言的数据类型与java数据类型所占的字节数略有不通,容易记混,如果记不清在开发中可以通过sizeof(数据类型)来打印查看。

        数据类型             占位符            字节数

            int                    %d                4

            short                %d                2

            long                 %ld               4

            float                 %f                 4

            double             %lf                8

            char                  %c                1

            十六进制           %x

            八进制               %o

            字符串               %s

 

  • 示例代码:
void main(){
	int i = 1;
	printf("%d\n", i);
	float f = 2.5;
	printf("%f\n", f);
	//基本数据类型所占的字节数
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	system("pause");
}
  • 输入输出函数

       输入函数scanf(),输出函数printf();使用输入函数会有不安全警告,需要添加宏定义,示例代码如下:

#define _CRT_SECURE_NO_WARNINGS  //宏定义  
#include<stdio.h>
void main(){
	int i;
	printf("请输入一个整数\n");
	scanf("%d",&i);//控制台输入,&取地址符
	printf("i的值为:%d\n", i);
	system("pause");
}
  • 指针变量    

         指针变量存储的是变量的内存地址。内存地址就是系统给数据分配的编号(门牌号),示例代码如下:

void main(){
	int a = 50;
        //创建int类型的指针
	int* p = &a;//指针变量,p的值就是i这个变量的内存地址
	printf("%#x\n",p);
	getchar();
}

        查看内存方法:首先在程序代码末尾打上断点,debug模式运行,然后在vs中点击调试->窗口->内存->内存1,然后在地址处输入控制台输出的地址回车,列数选择1,右击编辑内容选择带符号显示。就会出现下图:

        int* p=&a;是定义int类型的指针变量,是把a的地址赋值给int类型的指针变量p。

        再看下面的示例代码:

void main(){
	int i = 60;
	int* p = &i;
	*p = 200;
	printf("i的值为:%d\n", i);
	system("pause");
}

        运行结果为:I的值为200,指针变量p存储的是变量的地址,而*p可以访问该地址所在位置的值,间接赋值。

        配合下面的结构图理解:

        指针的基本用法:

void update(int* p){
	*p = 100;
}
void main(){
	int i = 60;
	int* p = &i;
	update(p);
	printf("i的值为:%d\n", i);
	system("pause");
}

        上面的代码打印结果:i的值为100;update()方法参数是指针,指针p存储的是i变量的地址,可以直接访问i的地址,而如果参数是变量,那只会重新开辟一块内存空间,就不会修改i变量的值。

 

  • 指针为什么会有类型?

        在64位操作系统中指针存储空间是8字节,变量的地址是变量所在的存储空间的首地址,类型是告诉系统读取到什么位置结束,如果类型不匹配,会造成数据错误或者修改不该修改的内存。所以同类型的指针指向同类型的数据就不会出错了。

 

  • 空指针

        指针定义后需要初始化才可以使用,可以把指针初始化为NULL,空指针的默认值为0,但是操作系统不允许访问内存地址0。

void main(){
	int *p=NULL;
	//空指针默认值为0
	printf("%d\n", p);
	//操作系统不允许访问地址0,会提示读取位置冲突
	printf("%d\n",*p);
	getchar();
}
  •  总结

        c语言的数据类型与java的数据类型略有不同,在c99之前,c语言里面没有布尔类型而是非0即真,在c99中引入了标准的布尔类型"_Bool",值域为0和1。占1个字节。还有c语言中long是占4个字节,java中占8个字节。如果记不住,可以通过打印sizeof(数据类型)类获取该类型所占的字节数。

        指针存储的是变量的地址,通过*可以操作变量,可以直接访问变量地址。在c语言的函数中很常见的参数。

 

  • 下篇预告

        下一篇会学习二级指针、指针运算、数组运算、函数指针。很荣幸我们能一起学习,一起成长。如果文中有错误,欢迎大神留言指正。谢谢!

------------------------------------------------------

想要跟我一起学习一起成长,请关注我的公众号:程序员持续发展方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值