首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新人关于指针计算的一行代码

2013-03-21 
新人求助:关于指针计算的一行代码刚学C++不久,最近在研究libcurl的看到一段代码时,其中有一行想了好久还不

新人求助:关于指针计算的一行代码
刚学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
[解决办法]

引用:
引用:
*((string*)stream) += pTmp;
就是一个string的变量和一个char *相加,结果就是把字符串连接起来了,并得到一个string

比如之前stream里面装了abc,pTmp指向def,那么连起来就成了abcdef

 *((string*)stream) 这个运算的结果是指针吗?
stream本来是一个void*类型的变量,(string*)stream表示强制转化为 string* 类型(string的指针类型),*((string*)stream)表示stream指向的对象,*用在指针变量前,表示解引用指针,也就是返回指针指向的对象
[解决办法]
整个函数的功能,是把buffer里面的数据,写到输出参数 stream里面。

如你说说,stream是string类型,传入的时候,是取地址传入的。形参是void* stream。

(string*)stream 就是把void* stream强制转换为string* 类型了。这就对应了实参 &m_strRespone了吧
*(string*)stream 就是取得stream的值,也就是 m_strRespone的值了吧
*(string*)stream += pTemp; 也就是 m_strRespone += pTemp

这样理解,算是清楚了吧?

热点排行