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.被掉函数中通过修改 *形参名的方式修改主调函数相关变量的值