NDK是什么?
- 1.定义:Native Development kit,是android工具开发包
- 2.作用:快速开发c、c++的动态库,并自动将so和应用一起打包成apk
- 3.提供了把.so和.apk打包的工具
- 4.提供了交叉编译器,用于生成特定cpu平台动态库
- 5.提供了native的支持
优点:
- 运行效率高
- 代码安全性高
- 功能扩展性好
- 易于代码复用和移植
c语言中指针就代表地址。
//代码
int main() {
printf("Hello, World!\n");
1. int num = 999;
2. int *num_p = #
3. int **num_p_p = &num_p;
printf("num_p的值时:%p,num_p_p的值是:%p\n", num_p, num_p_p);
printf("获取到最终的值时:%d\n", **num_p_p);
return 0;
}
//看下输出
Hello, World!
num_p的值时:0x16bbdf288,num_p_p的值是:0x16bbdf280
获取到最终的值时:999
- 代码1:赋值999.
- 代码2:将num的地址给指针num_p
- 代码3:将num_p的地址给双重num_p_p
%p表示输出变量的地址
&表示取得变量的内存地址
%d表示输出值。**num_p_p,
第一个*表示输出变量的值,此时是2000H,第二个*表示获取2000H的值,
是1000H,输出值就是1000H所对应的内存地址的值,就是999
函数指针:
#include <stdio.h>
void add(int num1,int num2) {
printf("num1 + num2 = %d\n",(num1 + num2));
}
void mins(int num1,int num2) {
printf("num1 - num2 = %d\n",(num1 - num2));
}
void opreate(void(*method)(int,int),int num1,int num2) {
method(num1,num2);
printf("num1 + num2 = %d\n",(num1 + num2));
}
int main() {
opreate(add,10,10);
opreate(add,20,10);
return 0;
}
//放下我的代码笔记
int i = 100;
double d = 200;
float f = 200;
long l = 100;
short s = 100;
char c = 'd';
//字符串
char * str = "Derry";
// 不是随便打印的,需要占位
printf("i的值是:%d\n", i);
printf("d的值是:%lf\n", d); // lf == long float == double
printf("f的值是:%f\n", f); // f == floot
printf("l的值是:%d\n", l); // d == 整形
printf("s的值是:%d\n", s); // s == short
printf("c的值是:%c\n", c); // c == char
printf("字符串的值是:%s\n", str); // c == char
// 基本类型的占用字节数 sizeof获取字节数
// int 占几个字节 == 4
// double 占几个字节 == 8
// char 占几个字节 == 1
printf("int 数据类型所占的字节数: %d\n",sizeof(int)); //4
printf("double 数据类型所占的字节数: %d\n",sizeof(double )); //8
printf("char 数据类型所占的字节数: %d\n",sizeof(char )); //1
#include <stdio.h> // C99 标准库
//Java 万物皆对象
//c C++(对象) 万物皆指针
//Linux 万物皆文件
//指针 == 地址
// %p == 地址输出的占位
// & == 取出地址
int number1 = 100000;
printf("此number1变量的地址是:%p\n", &number1); // 此number1变量的地址是:0x16f087568
return 0;
}
//指针难度高一点
int number_int = 100;
double number_double = 200;
printf("number_int的值是:%d\n",number_int);
printf("number_double的值是:%lf\n",number_double);
/**
*number1的地址是0x16f297458
*number_int的值是100
*number_double的值是200.000000
*/
//* == 取出number_int地址对应的值 == 100
// 指针取出值
// 既然任何变量都是地址,可以使用都在获取值(灵感)
printf("number_int的值是:%d\n",*(&number_int));
printf("number_double的值是:%lf\n",*(&number_double));
// ============== 难度
int * intP = &number_int;
double * doubleP = &number_double;
//输出100 和 200
printf("number_int的值是:%d\n",*intP);
printf("number_double的值是:%lf\n",*doubleP);
/**
* 大道至简
* 内存地址 == 指针
* 指针 == 内存地址
* int * double * (int类型指针)
*
* 指针别名,指针变量 == 就是一个变量而已 只不过是指针的变量
*/
//通过 指针(地址)修改值
int main(){
int i = 100;
// p:我只是接受地址,你给我100,不规范
// int * p = &i;
int * p = &i;
i = 200;
printf("i的值是:%d\n", i);
*p = 300; // i的值是:300 * p 代表i的地址
printf("i的值是:%d\n", i);
return 0;
}
#include <stdio.h>
void change(int *i); // 先声明
// 函数 去修改一个数(指针操作)
int main(){
int i = 100;
change(&i);
printf("%d\n", i);
printf("%p\n", &i);
return 0;
}
//函数不能写在main下面
void change(int *i){
*i = 200;
printf("%p\n", &i);
}//实现
#include <stdio.h>
//只接收指针(内存地址) 内存地址 == 指针
void change1(int * a,int * b){
int temp = *a;
*a = *b;
*b = temp;
}
int main(){
int a = 100;
int b = 200;
change1(&a, &b);
printf("交换完成后的效果:%d,%d\n",a,b);
}