永发信息网

指针的返回问题

答案:1  悬赏:0  手机版
解决时间 2021-01-27 04:36
  • 提问者网友:夢醒日落
  • 2021-01-26 18:15
比如有如下函数:
//是类中的一个函数
//Node 是一个结构
bool CSingleLinkList::point( int position, PolynomialNode *p )
{
PolynomialNode *tmpPtr = m_pHead;
int curPos = 0; //count

while ( tmpPtr!=NULL && curPos < position )
{
tmpPtr = tmpPtr->pNext;
curPos++;
}

if ( tmpPtr != NULL && curPos == position )
{
p = tmpPtr;
return true;
}
else
{
return false;
}
}

我本想用形参表里的 p 返回查找到的结点的地址,
但是我在调试的时候发现,这个每次运行完后并不能把值返回。
可是我看其它的一些程序也好像有这样的方法,人家的就能返回,为什么我的这个就不能返回呢?

还请知道的帮帮忙,先谢过了。
最佳答案
  • 五星知识达人网友:荒野風
  • 2021-01-26 18:29
你需要传递 PolynomialNode **p 类型来返回数据,如下例子:
==============================================================

#include
#include

void GetValue(int *p1,int *p2,int *p3,int **p4,int **p5);

void main(void)
{
int *p1 = NULL;
int *p2 = NULL;
int p3 = 0;
int *p4 = NULL;
int *p5 = NULL;

GetValue(p1,p2,&p3,&p4,&p5);

printf(" p1 = %d\n",p1);//p1并没有返回任何值,仍然是NULL
//printf("*p1 = %d\n" *p1);//此时数据并没返回,调用*p1会报错
printf("p2 = %d\n",p2);//p2没有得到任何值
//printf("*p2 = %d\n",*p2);////此时数据并没返回,调用*p2会报错
printf("p3 = %d\n",p3);//此时p3是已得到函数中赋予的值了,即,函数中将a的值拷贝到了p3所在的内存地址(指针)中.
printf("p3的地址为: %d\n",&p3);
printf("p4 = %d\n",p4);//此时p4已在函数中分配空间
printf("*p4 = %d\n",*p4);//可见p4的值
printf("p5 = %d\n",p5);
printf("p5的值为: %d\n",*p5);//可见虽然返回了a的地址,但是a作为局部变量在函数返回时已经被销毁,
//虽然p5仍然指向以前a的内存地址位置,但是该位置已经没有变量a了,有可能*p5的值仍然为3,那只是该内存被系统回收但还没被分配使用而已
//也就是说,*p5的值是个不能确定的数据了.

delete p4;

getchar();
}

//任何函数在调用的过程中都会在栈空间中保存形式参数,形式参数的值由调用函数的实际参数拷贝过来,但是它是独立于实际参数
//的,因为实际参数和形式参数在内存的不同地方,函数在运行过程中都是对形参及该函数的局部变量操作,函数返回时栈空间被释放,所有对形式参数的修改不会体现到实际参数中,所谓的"传址调用"实际
//上只是将类型为指针的实际参数拷贝了一份到函数中,在函数中通过指针的*操作符,直接操作了指针所指向的内存地址而已.
void GetValue(int *p1,int *p2,int *p3,int **p4,int **p5)
{
int a = 3;//局部变量内存也在栈中

printf("a的地址为: %d\n",&a);

p1 = &a;//这样的话a的地址是不能被带回去的,虽然在此函数里面p1是有值的,但是并不能将此值返回到主函数
//*p2 = a;//这样的话a的值会被直接带回去但是运行时会报错,因为p2指针在main函数中并没分配空间,无法存储a的值
*p3 = a;//这样的话a的值会通过p3带回去(直接拷贝到了p3所指向的内存地址中)
*p4 = new int;//为p4分配空间
*(*p4) = a;//将a的值拷贝到p4新分配的空间中
*p5 = &a;//这样的话可以将a的地址返回到主函数中
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯