*含义

1.乘法 3*5
2.定义指针变量 int * p;//定义了一个名字叫p的变量,能够存放int数据类型的地址
3.指针运算符,
//如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量

 打印数据类型

%d  -  int
%ld – long int
%c - char
%f - float
%lf – double
%x – 十六进制输出 int或者long int或者short int
%o - 八进制输出
%s – 字符串

3、指针

指针就是地址. 热身小程序 介绍指针
int * p; //p是变量的名字, int * 表示p变量的数据类型是存放int类型的地址的数据类型
//int * p; 不表示定义了一个名字叫做*p的变量
// int * p; 应该这样理解: p是变量名, int *是数据类型 ,p变量的数据类型是int*
//所谓int * 类型 实际就是存放int变量地址的类型
int i = 3;
p = &i;
/*1. p保存了i的地址, 因此p指向i
2. p不是i,i也不是p,修改p的值不影响i的值,修改i的值也不会影响p的值
3. 如果一个指针变量指向了某个普通变量, 则 *指针变量 就完全等同于 普通变量
例子:
如果p是个指针变量,并且p存放了普通变量i的地址则p指向了普通变量i
*p 就完全等同于 i
在所有出现*p的地方都可以替换成i
在所有出现i的地方都可以替换成*p
*p 就是以p的内容为地址的变量*/
j = *p; //等价于 j = i;
printf("i = %d, j = %d\n", i, j);

4、指针与数组

数组名,下标和指针的关系,指针变量的运算
数组名
int a[5] //a是数组名,5是数组的大小,元素个数
int a[3][4] // 3行4列 a[0][0]就是数组的第一个元素
Int b[5]
A=b ;//错误 一维数组名是个指针常量,它存放的是一维数组第一个元素的地址
int a[5];
int a[3][4];
printf("%#X\n",&a[0]);
printf("%#X\n",&a);
下标和指针的关系
如果p是个指针变量 则p[i] 等价于 *(p+i)

5、动态分配内存

动态内存分配问题
传统数组的缺点
1.数组长度必须实现指定,
并且只能是常整数.
int a[5];
int len;
int a[len];//error
2.传统形式的数组,程序员没法手动释放空间
数组一旦定义,系统为该数组分配的空间一直存在
函数运行完毕,数组的空间就被释放
3.数组的长度不能在函数运行中动态增加或者缩小
4.A函数定义的数组只有在A没执行完毕前被使用,a函数运行完毕后,a的数组就无法被其他函数使用

# include <stdio.h>
# include <malloc.h> //不能省 malloc 是 memory(内存) allocate(分配)的缩写
int main(void)
{
int i = 5; //分配了4个字节 静态分配 11 行
int * p = (int *)malloc(4); //12行
/*
1. 要使用malloc函数,必须添加malloc.h这个头文件
2. malloc函数只有一个形参,并且形参是整型
3. 4表示请求系统为本程序分配4个字节
4. malloc函数只能返回第一个字节的地址
5. 12行分配了8个字节, p变量占4个字节, p所指向的内存也占4个字节
6. p本身所占的内存是静态分配的, p所指向的内存是动态分配的
*/
*p = 5; //*p 代表的就是一个int变量, 只不过*p这个整型变量的内存分配方式和11行的i变量的分配方式不同
free(p); //freep(p)表示把p所指向的内存给释放掉 p本身的内存是静态的,不能由程序员手动释放,p本身的内存只能在p变量所在的函数运行终止时由系统自动释放
printf("大家好!\n");
return 0;
}

6、函数指针

1.定义int (*pf)(int x, int y);
2.赋值 pf = add;
3.引用 pf(3,5);

JNI由浅入深_2_C语言基础的更多相关文章

  1. 八、android jni 之C语言基础

    *含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...

  2. android jni 之C语言基础

    *含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...

  3. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  4. 20165212 学习基础和C语言基础调查

    学习基础与C语言基础调查 阅读文章的心得体会 五篇文章都从不同角度阐述了毅力的重要性,打字.减肥.运动各方面,比如“每天一万步”这个任务,人们通过建群聊互相监督.“打卡”的方式来实现坚持的目的,我认为 ...

  5. Android之——JNI配置C语言打印Logcat信息

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47425073 这篇文章给大家介绍一下在JNI中怎样为C语言配置打印Logcat信息 ...

  6. NDK以及C语言基础语法(一)

    一.什么是NDK? Native Development Kit (本地开发工具包): NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk ...

  7. C 语言基础,来喽!

    前言 C 语言是一门抽象的.面向过程的语言,C 语言广泛应用于底层开发,C 语言在计算机体系中占据着不可替代的作用,可以说 C 语言是编程的基础,也就是说,不管你学习任何语言,都应该把 C 语言放在首 ...

  8. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  9. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

随机推荐

  1. 基于springMVC实现登录过滤器

    此文章是基于 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 一. 相关文件介绍 1. LoginFilter.java:登录过滤器,保证每次的url访问都对s ...

  2. HDU2048 神,上帝以及老天爷 错排

    http://acm.hdu.edu.cn/showproblem.php?pid=2048 这是一道错排的题目 错排如下:http://baike.baidu.com/link?url=U2_H-4 ...

  3. LOJ6066:「2017 山东一轮集训 Day3」第二题

    传送门 二分答案 \(k\),考虑如何 \(hash\) 使得做起来方便 把每个点挂在 \(k+1\) 级祖先上,考虑在祖先上删除 这道题巧妙在于其可以对于 \(dfs\) 序/括号序列 \(hash ...

  4. Html5 填表 表单(二) input type 各种输入, 各种用户选择,上传等等泛输入用户交互

    <input>        无限制输入     type    限制输入 type = 如下类型     type 后还可以跟一些属性: 如<input type=text max ...

  5. Linux 的su 与sudo 的区别,查看所有用户

    首先,我们要知道系统当中存在哪些用户. 1.用户名和密码的存储位置 存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow 通过/etc/shadow获取的只是密码加密后的Ha ...

  6. Ubuntu-18.04下安装mysql

    安装mysql服务器 1. sudo apt-get install mysql-server 2. sudo apt-get install mysql-client 登录问题 安装成功后,我们会发 ...

  7. SQL Server ->> 使用Azure Active Directory Authentication连接到Azure SQL Database

    SQL Server 2016以后支持Azure AD集成验证,这当中有些数据驱动必须在高版本才可以使用,支持的包括sqlcmd,SSDT,JDBC,ODBC,SSMS等. 对于SSIS来讲,我们需要 ...

  8. Hadoop配置文件详解

    1       获取默认配置 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知 ...

  9. 《C++ Primer Plus》读书笔记之四—分支语句和逻辑操作符

    第六章 分支语句和逻辑操作符 1.&&的优先级低于关系操作符. 2.取值范围:取值范围的每一部分都使用AND操作符将两个完整的关系表达式组合起来: if(age>17&& ...

  10. 沉淀再出发:xml的意义和存在的价值

    沉淀再出发:xml的意义和存在的价值 一.前言 学习了那么多的语言.框架.语法和基础知识,我们对于数据的理解或许有了一定的认识,但是如何描述.包装.传输.存储数据的手法和流程我们了解的或许并不多,其中 ...