C语言提问.要求能详细分析一个题目.高手的来.谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/22 06:11:09
以下4个程序中,() 不能正确实现对两个整型变量的值进行交换
A.#include<stdio.h>
main()
{ int a=10,b=20;
swap(&a,&b);
printf(“%d%d\n”,a,b);
}
swap(p,q)
int *p,*q;
{ int *t ;
t=(int *)malloc(sizeof(int));
*t=*p;*p=*q;*q=*t;
}

B.#include<stdio.h>
main()
{ int a=10,b=20;
swap(&a,&b);
printf(“%d%d\n”,a,b);
}
swap(p,q)
int *p,*q;
{ int t ;
t=*p;*p=*q;*q=t; }

C. #include<stdio.h>
main()
{ int *a,*b;
*a=10, *b=20;
swap(a,b);
printf(“%d%d\n”,*a,*b);
}
swap(p,q)
int *p,*q;
int t;
t=*p;*p=*q;*q=t; }

D #include<stdio.h>
main()
{ int a=10,b=20;
int *x=&a,*y=&b;
swap(x,y);
printf(“%d%d\n”,a,b);
}
swap(p,q)
int

hi 昨天玩游戏没顾上你 我帮你看看吧
说实话 这四个代码都是错的 因为首先SWAP未声明 而且里面的形参类型也是不清楚的 如果用VC++编译的话肯定是不通过 现在不妨假设都能正确调用这个函数吧
A:如果 p,q分别是&a.&b的值话 A是可以的 顺便说下 如果形参是 int *p,
int *q
的话 那在函数里面有定义了一遍 是违法的 int *t是声明了一个指向int
类型的指针 但其指向是不确定的 t=(int *)malloc(sizeof(int)); 这句话
的作用就是 分配一块int大小的空间 并将其地址赋值给t 于是t就只想了这
块地址了
D:是也是可以的 除了T的类型 其他的都和A的是一样的 但也改变了原来空间的
的值得 因而也是对
这样吧 你上线的话 我给你看看代码吧 加深一下理解

t=(int *)malloc(sizeof(int));
动态分配空间!

A和D的交换方式类似
都相当于是使用了
int t;
t = *p;
*p = *q;
*q = t;
的方式实现的交换
t=(int *)malloc(sizeof(int));是用来分配一块动态存储空间,
跟int a;的区别是,
函数返回时局部声明的变量空间会被释放,而malloc这种不会被释放
所以A还是有一点问题的就是会内存泄漏。。。

A不可以,A中和你说的差不多,D可以,传地址交换,C语言指针那里有这个,但是这几个程序写得不好,严格地说不改动一下再运行都不太好