网站死链查询,济宁贵网站建设,用html5做的音乐网站,网络营销与直播电商专业就业前景最近一直在等面试消息#xff0c;都有点着急了#xff0c;的确#xff0c;还有太多不足#xff0c;笔面之后的一面技术面#xff0c;幸运地是在三个面试者中面试官留下了我#xff0c;可是一句话又搞的我一点底都没了#xff1a;“你别以为你通过了就怎么着#xff0c;… 最近一直在等面试消息都有点着急了的确还有太多不足笔面之后的一面技术面幸运地是在三个面试者中面试官留下了我可是一句话又搞的我一点底都没了“你别以为你通过了就怎么着其实你也很菜你写的程序不过就是让我大概看懂了罢了。”可不趁现在等消息好好想想写的那程序得了。当时一看题目感觉挺简单的字符串逆序很容易实现呐。 实现要求是至多只能申请一个空间不能用库函数。当时面试的时候是这样考虑的字符数组做函数参数传递此时如果直接传递的话就成值传参了所以立马就考虑到用二级指针。面试时写的程序大概如下 [c-sharp]view plaincopy #include iostream using namespace std; void reverse(char **src,int n); int main(int argc,char **argv) { char test[] I love you!; couttestendl; reverse(test,sizeof(test)); couttestendl; } void reverse(char **src,int n) { char temp /0; for(int i0;in/2;i) { temp (*src)[i]; *src[i] *src[n-i-2]; *src[n-i-2] temp; } *src[n-1] /0; return ; } 可是此时编译运行却出错“reverse”: 不能将参数 1 从“char (*)[12]”转换为“char **”
之后在main函数中加入:couttypeid(test).name()endl;couttypeid(test).name()endl;发现test为char *类型指针而test为char (*)[12]类型数组指针。所以参数传递时明显不匹配数组指针不能传向二级指针形参。修改代码后 [c-sharp]view plaincopy #include iostream using namespace std; void reverse(char **src,int n); int main(int argc,char **argv) { char test[] I love you!; couttypeid(test).name()endl; couttypeid(test).name()endl; couttestendl; char *p test; reverse(p,sizeof(test)); //reverse(test,sizeof(test)); couttestendl; } void reverse(char **src,int n) { char temp /0; for(int i0;in/2;i) { temp *src[i]; *src[i] *src[n-i-2]; *src[n-i-2] temp; } *src[n-1] /0; return ; } 通过编译运行后却又出现内存错误为什么呢
再看看reverse函数优先级又出错了*src[i];....这个算什么呢[]的优先级比*高所以首先src是与[]结合的那再通过解引用获得的会是什么元素此处已经明显内存溢出了。所以继续修改 [c-sharp]view plaincopy void reverse(char **src,int n) { char temp /0; for(int i0;in/2;i) { temp (*src)[i]; (*src)[i] (*src)[n-i-2]; (*src)[n-i-2] temp; } (*src)[n-1] /0; return ; } 再继续编译运行总算可以将I love you!逆序成!uoy evol I了。可是下面这个程序却让我彻彻底底挂掉了。 [cpp]view plaincopy #include iostream using namespace std; void reverse(char *src,int n); int main(int argc,char **argv) { char test[] I love you!; couttestendl; reverse(test,sizeof(test)); couttestendl; } void reverse(char *src,int n) { char temp /0; for(int i 0;in/2;i) { temp src[i]; src[i] src[n-i-2]; src[n-i-2] temp; } return ; } 同样达到了字符串逆序输出的效果。怎么感觉有点画蛇添足的效果呢函数是传入的是值形参尽管这个值的类型是个指针类型但是对于这个形参和实参来说所指向的位置是一样的即所操作的地址是一样的所以直接用数组名操作即可。哎果然还太菜呐。