浅谈使用C++多级指针存储海量qq号和密码
指针是c++中很重要的一部分内容。
可以认为,指针是C++这把宝剑最锋利的部分,当然,如果你使用不当,也会伤到自己的
本篇博客,将尝试用11级指针这个结构来存储海量的QQ号和密码。首先,郑重声明,我没有海量的QQ号和密码,只是想用这种结构来解决这个不存在的问题,不存在只是对我而言的,据称,腾讯内部的一些代码对QQ的处理就是用的这种结构
何为11级指针,其实,就是在指针前面加了11个*,加一个*就是1级指针,加两个*就是二级指针
char***********QQptr=NULL;
指针和数组有着扯不清的关系,这个11级指针,你可以理解为11维度的数组,平日里见得最多的恐怕也就是二维数组了,11维,只能脑补了。如果QQ号长度不够10位,则在前面补0,那么这个QQ号的10位数字就可以用来做数组的下角标了,最后的那个维度我们用来存储密码。
坦率的讲,我脑子里也对这个模型很是模糊,无法建立起一个有效的概念,所以,还是直接上代码吧,或许代码比语言有更好的解释效果:
#includeusingnamespacestd; #definePOINTER_SIZE10 intCharToInt(charch) { returnch-'0'; } char***********QQptr=NULL; voidaddQQ(char*qq,char*pass) { if(NULL==qq||NULL==pass) { return; } if(strlen(qq)!=10) { return; } intindex[10]; for(inti=0;i<10;i++) { index[i]=CharToInt(qq[i]); } if(QQptr[index[0]]==NULL) { QQptr[index[0]]=(char**********)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]]==NULL) { QQptr[index[0]][index[1]]=(char*********)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]]==NULL) { QQptr[index[0]][index[1]][index[2]]=(char********)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]]=(char*******)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]]=(char******)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]]=(char*****)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]=(char****)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]=(char****)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]]=(char***)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]]=(char**)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]],0,sizeof(char*)*POINTER_SIZE);//清零 } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]]==NULL) { QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]]=(char*)malloc(sizeof(char*)*1024); memset(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]],0,sizeof(char*)*POINTER_SIZE);//清零 } strcpy(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]],pass); } boolisExist(char*qq) { if(NULL==qq) { returnNULL; } if(strlen(qq)!=10) { returnNULL; } intindex[10]; for(inti=0;i<10;i++) { index[i]=CharToInt(qq[i]); } if(QQptr[index[0]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]]==NULL) { returnfalse; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]]==NULL) { returnfalse; } returntrue; } char*getPass(char*qq) { if(NULL==qq) { returnNULL; } if(strlen(qq)!=10) { returnNULL; } if(!isExist(qq)) { returnNULL; } intindex[10]; for(inti=0;i<10;i++) { index[i]=CharToInt(qq[i]); } returnQQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]]; } intmain() { QQptr=(char***********)malloc(sizeof(char*)*POINTER_SIZE); memset(QQptr,0,sizeof(char*)*POINTER_SIZE);//清零 char*qq="0381084992"; char*pass="314krtqw"; addQQ(qq,pass); cout< 总结
以上就是本文关于浅谈使用C++多级指针存储海量qq号和密码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!