关于C语言结构体指针中[]语法的疑问
关于C语言结构体指针中[]语法的疑问
嘿,我来给你把这个点讲明白!
首先咱们拆解一下你疑惑的&(mem->response[mem->size]):
mem是一个结构体指针,response是这个结构体里的成员,它应该是一个数组(或者可以被当作数组使用的指针,毕竟C里数组名会退化为指针);mem->size则是记录当前response里已经存了多少数据的变量。mem->response[mem->size]里的[]就是咱们平时用的数组下标运算符,和你写arr[i]的用法完全一样。它等价于*(mem->response + mem->size),意思是取response这个数组里,下标为mem->size的那个元素。- 前面的
&是取地址运算符,所以整个&(mem->response[mem->size])就是获取这个元素的内存地址。
放到memcpy的场景里看,这段代码是要把data里的内容追加到mem->response的已有数据后面——mem->size是已经用了的元素个数,那response[mem->size]就是已有数据的下一个位置,取它的地址作为拷贝的目标起点,刚好能把新数据接在旧数据后面,不会覆盖之前的内容。
举个简单例子:如果mem->size是3,response是个char数组,那response[3]就是数组的第4个元素(C数组从0开始计数),&response[3]就是这个元素的地址,memcpy就会把data从这个地址开始往里写,完美衔接之前存的0、1、2下标里的数据。
备注:内容来源于stack exchange,提问作者Yuki
相关产品推荐
相关产品推荐

