C语言开发,地址与指针
一.NDK
1.NDK(C/C++),SDK(java)
2.Native Development Kit,Android的开发工具包。
3.开发c,c++,so打包进apk,.so,.apk打包。
二.C语言基本数据类型
demo
#include <stdio.h>
int main() {
// 基本数据类型
int i = 100;
double a = 200.0;
float c = 300.0;
long d = 100;
short s = 100;
char f = 'd';
//字符串
char *str = "qfghh";
//需要占位
printf("%d\n", i);
//lf==long float
printf("%lf\n", a);
//f==float
printf("%f\n", c);
//d==整形
printf("%d\n", d);
printf("%d\n", s);
//c==char
printf("%c\n", f);
printf("%s\n", str);
printf("1111");
return 0;
}
三.字节数
//
// Created by MagicBook on 2023-09-30.
#include <stdio.h>
int main() {
//几个字节==4
printf("字节数 %d\n", sizeof(int));
//8
printf("字节数 %d\n", sizeof(double ));
//1
printf("字节数 %d\n", sizeof(char ));
return 0;
}
四.c/c++指针,地址就是指针
//
// Created by MagicBook on 2023-09-30.
//
#include <stdio.h>
int main() {
//main函数进栈,a变量加载,内存地址,000000f05b9ff70c,变量a指向这个地址。
//main进栈,别名b,值为100,内存地址:0x0011,&b,取出内存地址0x0011,*取出内存地址所对应的值。
int b = 100;
double c = 200.0;
printf("%d\n", b);
printf("%lf\n", c);
//指针取值
//变量都是地址,地址获取值
//*取出地址所对应的值
printf("%d\n", *(&b));
printf("%f\n", *(&c));
//pInt指针类型,&b存地址,指针是指向内存地址的
int *pInt = &b;
double *pDouble = &c;
//*pInt取出pInt内存地址对应的值
//指针==内存地址
//内存地址==指针
// int * int类型的指针
//指针别名,变量 就是定义的变量,指针类型的变量。
printf("%d\n", *pInt);
printf("%f\n", *pDouble);
return 0;
}
五.指针使用细节
//
// Created by MagicBook on 2023-10-18.
//
#include <stdio.h>
//接收内存地址,就是指针
void test3(int *a, int *b) {
//a的内存地址所对应的值
int tmp = *a;
//a内存地址的值赋值修改为b内存地址的值
*a = *b;
*b = tmp;
}
int main() {
//
int a = 1;
int b = 2;
test3(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}
//
// Created by MagicBook on 2023-10-18.
//
#include <stdio.h>
void test(int i) {
//这个i会重新开辟地址0x0022
//编译器构建形式参数,跟我们外面传进来的i没有关系,所以修改值不会影响到外面的值。
i = 11111;
printf("change %p\n", &i);
}
void test2(int *i){
*i = 4444;
// printf("change %p\n",i);
}
int main22() {
//内存地址假设0x0011
int i = 222;
//test函数进栈,
test(i);
//传地址,
test2(&i);
//输出还是222
printf("%p\n", &i);
return 0;
}
in22() {
//内存地址假设0x0011
int i = 222;
//test函数进栈,
test(i);
//传地址,
test2(&i);
//输出还是222
printf("%p\n", &i);
return 0;
}