准备:
AS2.3以上,使用CMake;
Visual Studio 2013
云主机(或 mac电脑直接编译so库)
0.后续课程安排
C基础
JNI基础
项目实战
C进阶
C++基础
C++进阶
项目实战
数据结构与算法
项目实战:智能识别,音视频,openGL。
1.C语言基础
cpp里面可以写c语言的东西。
#include <stdio.h> // 导入头文件,里面都是方法的声明(.h、.hpp)
// 实现文件(.c .cpp)
void main() {
printf("Hello world!\n"); // C打印
getchar(); // 程序暂停
}
2.基本数据类型
使用占位符输出。
int i = 100; // printf("i = %d \n", i); //100
double d = 200; // printf("d = %lf \n", d); //200.000000
float f = 200; // printf("f = %f \n", f); //200.000000
long l = 100; // printf("l = %ld \n", l); //100
short s = 100; // printf("s = %d \n", s); //100
char ch = 'D'; // printf("ch = %c \n", ch); // D
// 字符串 char*
3. 变量地址和指针
变量的地址:任何的数据(变量) 都会有地址(住址门牌号)
指针其实存放(指向) 的是变量的地址。
【&】符号代表 取变量的地址。指针非常灵活。
【* 】 通过* 取地址里面的值。对地址变量取值。
int i = 100;
printf("i的地址是 = %p", &i); // 【&】符号代表 取变量的地址
通过debug的调试,可以根据地址查询地址里面的值。
sizeof(int/double/char) 获取数据类型所占的字节数 4/8/1。
根据地址可以获取变量的值。
获取指针变量和获取地址的值。
int i = 100;
printf("i 的值是 %d \n", i);
printf("i 的值是 %d \n", *(&i) ); // 通过*获取地址的值
int* p = &i; // int* 代表的是int类型的指针(地址)
printf("i 的值是 %d \n", *p ); // 通过指针取值,同上
4.通过指针变量修改值
int i =100;
int* p = &i;
i = 200; // 通过变量名直接修改
// 另一只方式,通过指针修改, 获取指针的值进行间接修改。
*p = 300; // 重新给p地址里面赋值,300
printf("i的值是:%d \n", i);
4.1通过方法修改值
void change(int i) {
i = 200; // 直接修改不能修改。
}
void change2(int* p){
printf("change方法中,i的地址是:%p\n", p);
*p = 200; // 通过变量赋值
}
void main() {
int i = 100;
// change(i);
change2(&i); // 传入i的地址
printf("i 修改后的值:%d\n", i);
}
5.面试题:对两个值,写个方法,交换两个值。
#include <stdlib.h>
// p1, p2只是一个变量。
void swap(int* p1, int *p2) { // 传入地址
// 地址里面的值,修改替换掉。
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a=100;
int b=200;
printf("交换之前a=%d, b=%d\n", a, b);
swap(&a, &b); // 传地址或引用
printf("交换之后a=%d, b=%d\n", a, b);
return(0);
}
int a=100;
int b=200;
int* p1 = &a; // p1是一个变量而已,它是int 指针类型的变量
int* p2 = &b;
p1 = p2; // 只是把p1的变量改了,并没有改动 a的地址。
a, b 的地址还是原来的值。
5.1 对int a,b交换,但是不能用中间变量。
void swap(int* p1, int *p2) { // 传入地址
*p1 = *p1 + *p2;
*p2 = *p1 - *p2;
*p1 = *p1 - *p2;
}
int main()
{
int a=600;
int b=200;
printf("交换之前a=%d, b=%d\n", a, b);
swap(&a, &b); // 传地址或引用
printf("交换之后a=%d, b=%d\n", a, b);
return(0);
}
// 方案2:a=a|b; b=a^b; a=a^b;
学习能力,心态提升。提升层次等级。
网友评论