C指向指针的指针?怎么理解下面的代码?

2020-06-17 文化 79阅读
其实你的理解是完全正确的,只不过在这里你没有把malloc这个函数完全理解。函数CreateList()是为了创建一个列表。
所以根据你的第一段代码你会这样写:
LinkList* ha;
CreateList(&ha);
而根据你的第二段代码你会这样:
LinkList* ha;
CreateList(ha);
第二段代码的ha完全是如你所说的那样是值传递的。再看你的函数体,我们知道形参名为L,它所指向的地址会等于ha所指向的地址(也就是说L的值等于ha的值)。可是在你的函数体内你用malloc申请了一块内存,你把这块内存的地址赋值给了L(此时L的值就不再等于ha的值了)现在malloc所申请有内存也只有L能引用,而ha根本没有得到分配的内存。
如果用你的第一段代码:
我们知道传进去的是ha的地址。此时你把malloc申请的内存的地址赋值给*L,而*L刚好也就是ha。所以也就相当于给ha申请了一块内存。*L和ha都指向了新开辟的内存。这才算得上是真正的创建了一个列表。
malloc这个函数是在内存中申请一片空间,并返回指向这片空间的地址。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com