C++ 关于指针的一个问题

蓝线部分,我将这个指针符号*删掉后 编译报错
“SimpleCat::SimpleCat(SimpleCat &)”: 不能将参数 1 从“SimpleCat *”转换为“SimpleCat &”

我就是想知道这个指针:
问题一: 这个指针的作用是什么,为什么不能删
问题二: 如果他是指针,functionTwo为指向simpleCat的指针。但是这个指针貌似没有初始化!!!这岂不是错误的吗???

PS:请不要说 楼主你该看书了之类的话。因为我就是在好好看书,发现个问题有点搞不明白。谢谢

楼上的回答,基本就可以了,看你还不采纳,来说俩句。
问题1,不能删*的原因是,FunctionTwo这个函数返回的是theCat,是代码return theCat;决定的,而theCat的类型是SimpleCat*,即,是一个指针。在编译的时候,会检查函数的返回值与函数声明的返回值类型是否匹配,如果不匹配就会进行强制转换,如果你把*去掉,就会出现这种不匹配的情况,但是很明显SimpleCat这个类是你自己定义的,编译器当然不知道怎样将一个指向SimpleCat的指针转换为SimpleCat类型。
问题二,你可以仔细想想,或者过段时间以后再返回来想想这个问题,它根本就不是问题。学习C\C++的时候,是会出现这样关于初始化、关于指针的种种问题,我可以很负责人的给你担保,这个问题二你可以不需要急着解决,完全不会影响你之后的学习,等某一天的某一个时刻,你会突然明白是怎么回事的。这里简单的说一下这个问题,你只需简单地看一下就行了。
1、在你的main函数里,FunctionTwo返回的指针是Frisky的地址,即返回的这个指针是指向局部变量Frisky的指针。这个指针其实是Frisky的地址,是在程序加载到内存运行时,函数栈中就已经分配了内存的,即是已经初始化了的。
2、FunctionTwo这个函数返回的指针有没有初始化,完全看的是你传入的theCat参数有没有初始化。

能多问,是个好事,加油!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-08
楼主,
问题一
蓝线处的*表示你的函数的返回值是指针,红线处表示函数的形式参数是指针。
如果你删除掉蓝线处的* ,需要两个蓝线处都删除,然后该函数的返回值修改为:
return *theCat;

问题二
该指针i形式参数,在main函数中调用时,讲变量的地址传了过来,因此指针被正确初始化了,指向了传过来的那个变量了,因此不是错误。
第2个回答  2013-09-08

    这个指针代表返回值的类型。有*的话,代表返回的是指针。

    你要删除的话,函数内部也要修改,否则会报错。

    functionTwo只是一个函数,它返回的指针,就等于你输入的指针。

    输入的指针,就是你Frisky函数的地址。 

第3个回答  2013-09-08
首先回答你的第一个问题:蓝线部分的指针符号不能删除,因为函数中的返回值是指针类型,并且是SimpleCat的指针类型。此函数是一个指针类型函数,它的返回值是一个地址,这个地址可以指向大量的数据,而普通的函数,只能返回一个值。
当theCat是一个SimpleCat类的普通对象时蓝线部分的*就可以去掉。
第二个问题:functionTwo只是一个函数名,蓝线上的*说明了它是指针型函数前面的SimpleCat是说明它要返回的指针类型,即SimpleCat类。
指针不初始化,在编译时是没有任何问题的,编译时系统不会报错。但是系统会赋给指针一个随机值,这个值当你不知道的情况下去使用了,就是要命的。因为你不知道这个指针此时指向了什么地方。所以在使用前必须给指针赋值,建议在声明时先赋空值。
字字手写,认真作答。希望对你有帮助。可追问
第4个回答  2013-09-08
第一个问题,functionTwo为指向simpleCat的指针,你自己已经回答了,编译器也告诉你错误在哪了。一个类类型直接转成指向这个类类型的指针当然编不过了。
第二个问题,不知道你说的是哪个没有初始化,返回值还是传的参数。SimpleCat* FunctionTwo(SImpleCat * theCat)返回值当然不存在初始化这个说法,至于传的参数,是传的一个类的引用进来吧,也就是像FunctionTwo(&Frisky)这样调用的。这不就初始化了吗,用了一个SimpleCat的变量Frisky的引用去初始化。
目测楼主可能对引用和指针的概念还不是很清晰。可以认为引用就是一个变量的别名,他一定指向一个对象,这是他和指针的不同,也就是说引用不存在指向的对象为空的情况。在编译器看来指针和引用传进来的都是地址值,说白点就是本质上都是一个32位的标示变量地址的整数。指针有可能为NULL,就有可能传一个0x00000000的数进来,而引用不会,他一定会指向一个合法的对象,所以直接用引用初始化肯定没问题。可能这么说不算很严谨,至少目前个人来看是最好理解最好对他们做区分的一种解释。
第5个回答  2013-09-08
theCat是SimpleCat的指针,然后functionTwo函数又返回这个指针,所以这个函数就要用指针类型的啊