SOS 一个指针问题....!
代码如下
#include <stdio.h>
#include <stdlib.h>
int * c()
{
return (int *)malloc(sizeof(int));
}
void da(int *temp)
{
free(temp);
temp=NULL;
}
int main()
{
int *h;
h=c();
da(h);
if(h==NULL)
{
h=c();
printf("ssssss\n");
}
printf("eeeeeee\n");
getchar();
return 0;
}
运行输出老是eeeeee,怎样才能输出sssss,就是怎么样才能让一个指针在另一个函数中被重新赋值呀
谢谢
问题点数:20、回复次数:6Top
1 楼hoter(hoter)回复于 2005-04-03 13:58:45 得分 0
调用da(h);后h的地址并没有改变的。在函数da中虽然temp = NULL;但是它只改变行参temp的值,并没有改变实参h的值.
如果把temp = NULL改为*temp = 0;则调用da(h)后*h也是等于0。但是h的地址值始终没有改变。只是指向它的内容改变了。
Top
2 楼kobefly(科比--网络学习中)回复于 2005-04-03 14:03:33 得分 5
void da(int *&temp)
{
free(temp);
temp=NULL;
}Top
3 楼dongyuanzhang(阿林)回复于 2005-04-03 14:05:43 得分 5
void da(int **temp)
{
free(*temp);
*temp=NULL;
}
Top
4 楼szws(克米帅)回复于 2005-04-03 15:03:24 得分 5
其实这个和
void swap(int a,int b)
{
int temp;
a=b;
b=temp;
temp=a;
}
的错误差不多(不能实现a,b值的互换),不能传值,
加个引用就可以了
void da(int *&temp)
{
free(temp);
temp=NULL;
}
Top
5 楼cqulzg(love_cpp)回复于 2005-04-03 15:21:07 得分 5
采用引用和传址都可以Top
6 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-03 15:49:37 得分 0
void da(int **temp)
{
free(*temp);
*temp=NULL;
}
=====
up,用指针的指针或指针的引用。Top




