C指针即强大又危险,而在我看来C指针是十分有意思的东西。下面写了段测试程序来理解C指针的灵活使用
BYTE *pby = NULL;
BYTE **ppby = NULL;
BYTE **ppp = NULL;
BYTE ***pppby = &ppp;
ppby = (BYTE **)malloc(sizeof(BYTE *) + 4);
memset(ppby, 0, 8*sizeof(BYTE));
if (ppby)
{
*pppby = ppby;
pp = ppby + 2;
pby = (BYTE *)(ppby + 1);
memcpy(pby, sz, 1);
free(ppby);
}
1. 指针变量的内存存储
从上面声明的几个指针,每一个指针变量都有实际的内存存储空间,而他们都并未指向一个实际的内存空间,也就是pby变量在内存中有实际的存储空间,而*pby则没有实际的存储空间,因为pby为NULL并未指向一个合法的地址,所以这时候对*pby做赋值操作将导致内存问题是不合法的。
而
BYTE **ppp = NULL;
BYTE *** pppby = &ppp; //将ppp变量所存储的地址用取地址符传递给pppby,故pppby存储的是ppp的地址,即pppby已指向一个合法的内存地址,所以一下出现*pppby = ppby;则是合法的。
先写到这,下班了,后续在继续写剩余的C指针有趣故事。