Android 下 JNI 开发Day1
互换两个数字-26
1_简单做法
交换两个数字
#include<stdio.h>
#include<stdlib.h>
/*
交换两个数字
*/
main()
{
int i = 123;
int j = 456;
int temp = i;
i = j;
j = temp;
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
要求在函数里面做
#include<stdio.h>
#include<stdlib.h>
/*
交换两个数字
*/
swap(int i,int j){
int temp = i;
i = j;
j = temp;
}
main()
{
int i = 123;
int j = 456;
swap(i,j);
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
运行结果,值没有变化如图:
打印main方法和swap中i和j的地址值,代码如下:
#include<stdio.h>
#include<stdlib.h>
/*
交换两个数字
*/
swap(int i,int j){//值传递,值传递不会影响变量的值
int temp = i;
i = j;
j = temp;
printf("swap方法中i的地址:%#x\n",&i);
printf("swap方法中j的地址:%#x\n",&j);
}
main()
{
int i = 123;
int j = 456;
printf("main方法中i的地址:%#x\n",&i);
printf("main方法中j的地址:%#x\n",&j);
swap(i,j);
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
运行结果,地址不一样如图:
画图分析原因
可以打印出来看看
printf("swap中i=%d\n",i);
printf("swap中j=%d\n",j);
2_引用传递 ,把地址传过来
swap2(int* i, int* j) { // 引用传递
int temp = *i;
*i = *j;
*j = temp;
}
main()
{
int i = 123;
int j = 456;
swap2(&i,&j); //不要忘了是&i
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
运行结果如图:结果已经交换了
画图分析引用的传递:
3_函数返回一个以上的值
创建文件“c程序返回多个值.c”
change(int* a, int* b) {
*a = 1;
*b = 2;
}
main() {
int a = 3, b = 5;
change(&a, &b);
printf(“a=%d, b=%d\n”, a, b);
system(“pause”);
}
小总结:
通过被调函数修改主调函数普通变量的值
1.实参必须是普通变量的地址
2.形参必须是指针变量
3.被掉函数中通过修改 *形参名的方式修改主调函数相关变量的值