初次接触动态数组的编写时候在晚上学习的程序是这样定义动态数组的
struct dynamicArray
{
void** pAddr;
//数组的容量
int m_Capacity;
//数组大小
int m_Size;
};
此处虽然大概知道之所以使用void**可能是因为保护数据类型,但是一直不明什么为什么时void**而不是void*。
直到自己尝试去写程序实现发现当程序这样写时
会提示%d对应的是int类型,而p[0]是void类型。这里也好理解。p是void*类型,所以*代表着p里面存的是地址,地址里所存的数是void类型。p[0]是编译器所申请的那段内存的第一个内存单元的值,他自然是void类型的,此处有两种改法:
第一种把void*改为int*即可,这种简单易懂,因为这样下来p[0]自然就是int类型的了。
第二种就是把void*改为void**。还是按照那个思路一层一层往开剥,p是void**类型的,所以第一个*代表着p里面存的是地址,地址里所存的数是void*类型(这是由第二个*决定的)。p[0]是编译器所申请的那段内存的第一个内存单元的值,他自然是void*类型的,所以此时p[0]=5,实际上是吧5作为一个地址赋值给p[0]的。