新人求助:关于指针计算的一行代码
刚学C++不久,最近在研究libcurl的看到一段代码时,其中有一行想了好久还不知道结果是什么,具体代码如下:
size_t write_callback(void *buffer, size_t size, size_t nmemb, void *stream)
{
size_t nBufLen = size * nmemb;
char* pTmp = new char[nBufLen + 1];
memset(pTmp, 0, nBufLen + 1);
memcpy(pTmp, buffer, nBufLen);
*((string*)stream) += pTmp;
delete[] pTmp;
return nBufLen;
}
上面红色的那行“*((string*)stream) += pTmp”有哪位大哥能帮忙解释一下,到底应该怎么样去理解呢?
void * stream 是从这行代码的第三个参数传过来的(也就是&m_strRespone):
curl_easy_setopt(m_pCURL, CURLOPT_WRITEDATA, &m_strRespone);
而m_strRespone是一个string类型的变量;
不知道*((string*)stream) 这个计算的结果到底是啥?是一个指针?我个人理解是stream是一个通过形参传入的指针,通过(string*)转换后变成string类型的指针,前面再上一个*,那就是变量了?那为啥又能与pTmp这个指针进行运算?结果是啥呢?
[解决办法]
*((string*)stream) += pTmp;
就是一个string的变量和一个char *相加,结果就是把字符串连接起来了,并得到一个string
比如之前stream里面装了abc,pTmp指向def,那么连起来就成了abcdef
[解决办法]
对string*类型的指针进行*操作得到的就是string类型的对象
能和pTmp进行+=运算这是string类型的功能
相当于将pTmp指向的字符串复制到string内字符串的后面,相当于C里面的strcat
[解决办法]