第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函数又返回这个指针,所以这个函数就要用指针类型的啊