C语言C语言中及指针相关的季志问题

例子1.

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

main()
{
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);
}

跟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在概念后,马上叫一个初起值,就未见面起题目了。