我是弄java的,因为最近需要使用jni,也需要编写一些C语言程序,现在函数指针这里出现问题,函数传递的参数是不同的,但是在函数内部打印出来的参数地址为什么就变成相同的呢?
#include <stdio.h>
int show1(int number);
int show2(int number1);
int main(void)
{
int number = 10;
int number1=3;
//printf("\n show1 number is : %d,and number's address is :%p\n",number,&number);
//printf("\n show1 number is : %d,and number1's address is :%p\n",number1,&number1);
show1(number);
show2(number1);
return 0;
}
int show1(int number)
{
//int *pnumber = &number;
//*pnumber *= 2;
printf("\n show1 *pnumber is : %d,and pnumber's address is :%p\n",number,&number);
return 0;
}
int show2(int number1)
{
//int *pnumber1 = &number1;
printf("\n show2 *pnumber is : %d,and pnumber's address is :%p\n",number1,&number1);
return 0;
}
我执行了你的程序,结果是:
show1函数执行的时候,number放在地址0012FF2B里,但是执行完后这个地址系统就回收了,不再保存number。
到show2函数执行的时候,恰好系统也给number1分配了这个地址0012FF2B,这个时候地址0012FF2B放的是number1.
所以这里没有存在冲突的地方。
你可能误会了、你这个完全没有用到指针、只是传了一个形参、show1和show2里面的number只是main中相应数据的一份拷贝、只不过是拷贝到了同一地址(因为show1结束后其所占用的内存被收回,而为show2分配空间时再次使用了该地址),如果你在show1()或show2()里面改变number的值你会发现main()里面相应变量的值是不会变的,如果你想在show1和show2中分别打印出主函数中所定义的两个变量,或改变其值,就要用到指针了,具体改动如下
#include <stdio.h>