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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值