关于void**问题的整理

初次接触动态数组的编写时候在晚上学习的程序是这样定义动态数组的

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]的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值