传递数值:
#include <stdio.h>
//exchange numbers
void exchange_number(int iNum_1,int iNum_2){
int t;
t=iNum_1;
iNum_1=iNum_2;
iNum_2=t;
}
int main(int argc, const char * argv[]) {
// insert code here...
//declare places for two numbers
int iNumber_1,iNumber_2;
//enter two numbers and save them seperately
scanf("%d %d",&iNumber_1,&iNumber_2);
//exchange numbers
exchange_number(iNumber_1,iNumber_2);
printf("number1=%d,number2=%d\n",iNumber_1,iNumber_2);
return 0;
}
数值并不会交换!
由于自定义函数中只是交换了inmu1和inum2对应存储空间中的数值。在函数结束时这些空间会被释放。而inumber12对应存储空间中的数值并没有发生改变。
传递指针:
#include <stdio.h>
//exchange numbers
void exchange_number(int *iNum_1,int *iNum_2){
int t;
t=*iNum_1;
*iNum_1=*iNum_2;
*iNum_2=t;
}
int main(int argc, const char * argv[]) {
// insert code here...
//declare places for two numbers
int iNumber_1,iNumber_2;
//enter two numbers and save them seperately
scanf("%d %d",&iNumber_1,&iNumber_2);
//exchange numbers
exchange_number(&iNumber_1,&iNumber_2);
printf("number1=%d,number2=%d\n",iNumber_1,iNumber_2);
return 0;
}
将存储两个数字的地址传递给自定义函数(因为是传递地址所以自定义函数中存储他们的inum1和inum2是指针形式的)。
将inum1中存储的地址中存储的数值(也就是inum1指向的数值)赋给t。
将inum2指向的数值放在inum1指向的地址
将t中的值放在inum2中存储地址的位置
函数结束num1和num2,t被释放。
但是未被释放的他们指向地址的存储空间中存的值已经被改变了