时间:2021-05-19
指针是c++中很重要的一部分内容。
可以认为,指针是C++这把宝剑最锋利的部分,当然,如果你使用不当,也会伤到自己的
本篇博客,将尝试用11级指针这个结构来存储海量的QQ号和密码。首先,郑重声明,我没有海量的QQ号和密码,只是想用这种结构来解决这个不存在的问题,不存在只是对我而言的,据称,腾讯内部的一些代码对QQ的处理就是用的这种结构
何为11级指针,其实,就是在指针前面加了11个*,加一个*就是1级指针,加两个*就是二级指针
char *********** QQptr = NULL;指针和数组有着扯不清的关系,这个11级指针,你可以理解为11维度的数组,平日里见得最多的恐怕也就是二维数组了,11维,只能脑补了。如果QQ号长度不够10位,则在前面补0,那么这个QQ号的10位数字就可以用来做数组的下角标了,最后的那个维度我们用来存储密码。
坦率的讲,我脑子里也对这个模型很是模糊,无法建立起一个有效的概念,所以,还是直接上代码吧,或许代码比语言有更好的解释效果:
#include <iostream> using namespace std; #define POINTER_SIZE 10 int CharToInt(char ch) { return ch - '0'; } char *********** QQptr = NULL; void addQQ(char *qq,char* pass) { if(NULL==qq || NULL==pass) { return ; } if(strlen(qq)!=10) { return; } int index[10]; for(int i =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); } bool isExist(char *qq) { if(NULL==qq) { return NULL ; } if(strlen(qq)!=10) { return NULL; } int index[10]; for(int i =0;i<10;i++) { index[i] = CharToInt(qq[i]); } if(QQptr[index[0]]==NULL) { return false; } if(QQptr[index[0]][index[1]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]]==NULL) { return false; } if(QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]]==NULL) { return false; } return true; } char* getPass(char* qq) { if(NULL==qq) { return NULL ; } if(strlen(qq)!=10) { return NULL; } if(!isExist(qq)) { return NULL; } int index[10]; for(int i =0;i<10;i++) { index[i] = CharToInt(qq[i]); } return QQptr[index[0]][index[1]][index[2]][index[3]][index[4]][index[5]][index[6]][index[7]][index[8]][index[9]]; } int main() { QQptr = (char ***********)malloc(sizeof(char*)* POINTER_SIZE); memset(QQptr, 0, sizeof(char*)* POINTER_SIZE);//清零 char *qq = "0381084992"; char *pass = "314krtqw"; addQQ(qq,pass); cout<<getPass(qq)<<endl; return 0; }总结
以上就是本文关于浅谈使用C++多级指针存储海量qq号和密码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
浅谈先来说一下“this指针”:C++中通过引入this指针解决该问题,暨:C++编译器给每个“非静态的成员函数”增加了一个隐藏的指针参数,让该指针指向当前对象
委托(delegate)是一种可以把引用存储为函数的类型,这类似于c++中的函数指针。回调函数c++中的回调函数,就是用函数指针来实现的。类似的,c#中用委托,
指针类型是C++中一个内容非常丰富的东西,掌握好它,对学习和理解C++有着非常重要的影响。下面介绍C++中两种函数指针和指向指针的指针数组的表示方法。(1)in
指针是C++和C语言中一个非常有用的东西,但难于掌握,本文转载介绍C++中指针使用的一些常见问题及使用方法。在下列函数声明中,为什么要同时使用*和&符号?以及什
本文地址:https:///oberon-zjt0806/p/14631149.html甜咸之争经常写C++的基本上避不开使用指针,而且C++中指针类型的写法大