淺談使用C++多級指針存儲海量qq號和密碼
指針是c++中很重要的一部分內(nèi)容。
可以認為,指針是C++這把寶劍最鋒利的部分,當然,如果你使用不當,也會傷到自己的
本篇博客,將嘗試用11級指針這個結(jié)構(gòu)來存儲海量的QQ號和密碼。首先,鄭重聲明,我沒有海量的QQ號和密碼,只是想用這種結(jié)構(gòu)來解決這個不存在的問題,不存在只是對我而言的,據(jù)稱,騰訊內(nèi)部的一些代碼對QQ的處理就是用的這種結(jié)構(gòu)
何為11級指針,其實,就是在指針前面加了11個*,加一個*就是1級指針,加兩個*就是二級指針
char *********** QQptr = NULL;
指針和數(shù)組有著扯不清的關(guān)系,這個11級指針,你可以理解為11維度的數(shù)組,平日里見得最多的恐怕也就是二維數(shù)組了,11維,只能腦補了。如果QQ號長度不夠10位,則在前面補0,那么這個QQ號的10位數(shù)字就可以用來做數(shù)組的下角標了,最后的那個維度我們用來存儲密碼。
坦率的講,我腦子里也對這個模型很是模糊,無法建立起一個有效的概念,所以,還是直接上代碼吧,或許代碼比語言有更好的解釋效果:
#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;
}
總結(jié)
以上就是本文關(guān)于淺談使用C++多級指針存儲海量qq號和密碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
C++中使用哈希表(unordered_map)的一些常用操作方法
C++標準庫中使用的unordered_map底層實現(xiàn)是哈希表,下面這篇文章主要給大家介紹了關(guān)于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以參考下2022-03-03
用C/C++實現(xiàn)linux下檢測網(wǎng)絡(luò)接口狀態(tài)
這篇文章主要為大家詳細介紹了用c/c++實現(xiàn)linux下檢測網(wǎng)絡(luò)接口狀態(tài),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實現(xiàn)方法示例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實現(xiàn)方法,結(jié)合實例形式分析了C語言平衡二叉樹的相關(guān)定義與使用技巧,需要的朋友可以參考下2018-01-01
C++通過ofstream和ifstream實現(xiàn)文件讀寫
本文詳細介紹了C++中通過ofstream和ifstream進行文件的讀寫操作,包括文件打開模式的選擇、錯誤處理策略以及二進制文件的特殊處理,重點講解了如何使用這些類進行文本和二進制文件的讀寫,并強調(diào)了正確處理文件操作中可能出現(xiàn)的錯誤,需要的朋友可以參考下2025-03-03

