当前位置: 首页 > 编程笔记 >

浅谈使用C++多级指针存储海量qq号和密码

利俊迈
2023-03-14
本文向大家介绍浅谈使用C++多级指针存储海量qq号和密码,包括了浅谈使用C++多级指针存储海量qq号和密码的使用技巧和注意事项,需要的朋友参考一下

指针是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号和密码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

 类似资料:
  • 本文向大家介绍浅谈C/C++中指针和数组的不同,包括了浅谈C/C++中指针和数组的不同的使用技巧和注意事项,需要的朋友参考一下 这边先简单介绍一下内存分区。 内存按照用途划分为五个区: 1.栈区:由系统控制分配和回收。 例如定义变量 int x = 0; int *p = NULL; 变量所占的内存都是分配在栈区的。 2.堆区:由程序员管理。 在C语言中由 malloc 申请的内存,或者在C++中

  • 多级指针概述 我们将指针变量理解为一个存储地址的变量。如果这个地址里面存储的依然是地址,那么我们就可以定义一个二维指针。通过一个二维指针,我们通过两次寻址操作就可以找到这个值。 比如我们定义一个int **p;这是一个二维指针,当编译器看到p的时候,它知道这是一个指针变量,指向一个地址;当它看到第二个的时候,它知道指向的地址里面依然还是地址。如下图所示: 如果我们将p[0]和p[1]分别指向两个字

  • 我有一个基类,然后有两个派生类。我使用基类的指针在Vector中存储派生类对象。现在我必须打印存储在vector中的数据 如何从向量中检索对象。 如何确定检索到的对象属于哪个派生类。 在这里,我使用向量将对象存储在向量中。 int main() {

  • 本文向大家介绍浅谈JavaScript中的this指针和引用知识,包括了浅谈JavaScript中的this指针和引用知识的使用技巧和注意事项,需要的朋友参考一下 this是javascript的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。 this指针在传统OO语言中,是在类中声明的,表示对象本身.在JavaScript中,

  • C++ 指针 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。C++ 指针

  • 多级指针举例 可能很多同学都执行过这个命令,ping www.baidu.com或者是ping www.qq.com,ping是一个命令,后面的网址就是它的传入参数。不同的参数会导致不同的运行结果。 下面就是我们main函数的标准写法,argc就是传入参数的个数,argv是一个字符串类型的二维指针。当我们需要传递下面四个字符串给main函数的时候,这四个是字符串的首地址不是连续的,我们就可以使用二