当前位置:必发365电子游戏 > 操作系统 > 进而在swap函数内部对p1
进而在swap函数内部对p1
2019-12-19

例子1.

void fun (int *x , int *y) {
  printf("%d, %d", *x, *y) ;
  *x = 3;
  *y = 4;
}

main()
必发365电子游戏,{
int x = 1, y = 2
fun(&y, &x);
printf("%d, %d", x, y);
}

结果
2, 1
4, 3

留意main在调用fun函数时, y 和x故意写颠倒了。

 --------------------------------------------------------------

例子2. 

#include <stdio.h>
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}

main()
{
int a, b;
int * p1 = &a, *p2 = &b;
scanf(%d %d, p1, p2);
swap(p1, p2);
prinf("%d, %d", *p1, *p2);
}

举例在决定台输入  2 和 5

则输出结果为 

5, 2

案由: 在调用swap函数时行使了职务任职资格,所以在swap函数内部对p1,p2 所引述的内容值的改造,会影响外面的a和b的值。

 --------------------------------------------------------------

例子3:

#include <stdio.h>
void swap(int *p1, int *p2)
{
int *temp;
temp = p1;
p1 = p2;
p2 = temp;
}

main()
{
int a, b;
int * p1 = &a, *p2 = &b;
scanf(%d %d, p1, p2);
swap(p1, p2);
prinf("%d, %d", *p1, *p2);
}

进而在swap函数内部对p1。和2分歧, swap函数中的temp为指针,temp=p1使得temp指向了2,p1=p2使得p1指向了5,p2=temp使得p2指向了5.

但聊到底的打字与印刷结果仍然为
2,5

由来是:即便main中调用swap函数时行使了指针传递,但swap函数中的全体操作都以:将指针本人的改善,而未有重新行使*操作符来改善“指针指向的内容值”


例子4:

#include <stdio.h>
void swap(int *p1, int *p2)
{
int *temp;
*temp = *p1;
*p1 = *p2;
*p2 = *temp;
}

main()
{
int a, b;
int * p1 = &a, *p2 = &b;
scanf(%d %d, p1, p2);
swap(p1, p2);
prinf("%d, %d", *p1, *p2);
}

和2很像。但独一分歧是,temp定义为指针并不是日常变量。看上去就如理所应当和2的输出结果风流倜傥致,仍然为
2,5 。

但实在运营时编译器会报错:违法的内部存款和储蓄器写入。

缘由是:temp为野指针,并不曾订购指向哪个地方。即便指向系统区,则恐怕产生操作系统死机。

假定temp在概念后,马上给三个伊始值,就不会有标题了。

上一篇:没有了
下一篇:没有了