void *memcpy1(void *desc,const void * src,size_t size){ if((desc == NULL) && (src == NULL)) { return NULL; } unsigned char *desc1 = (unsigned char*)desc; unsigned char *src1 = (unsigned char*)src; while(size-- >0) { *desc1 = *src1; desc1++; src1++; } return desc;}int _tmain(int argc, _TCHAR* argv[]){ int dest[2] = {0}; const char src[5] = "1234"; memcpy1(dest,src,sizeof(src)); printf((char *)dest); int m = -1; return 0;}上面这行代码可以运行但是,为什么我把int dest[2] = {0};const char src[5] = "1234";这两行代码改成string *p="aaaa";和string *q="bbbbbb",就不行了,希望各位朋友可以解答得详细一点,脑子太蠢。。不好使
2 回答
onemoo
TA贡献883条经验 获得超454个赞
memcpy1函数的 desc 和 src 参数类型是指针,函数的行为就是从 src 所指的内存处复制size个字节到 dest 所指的内存。
int dest[2] = {0} 和 const char src[5] 这两句声明了两个数组 dest 和 src,数组本身当然就是一段连续的内存。
而且数组在用作右值时——传参数就是此种情况——会自动转为指向其首元素的指针,也就是说传入memcpy1的 dest 和 src 就是指向它们这两段内存的指针,完全符合函数的参数要求。 而且第三个参数是就是src数组的size,所以函数可以正确执行。
你修改的代码是将 dest 和 src 的类型换成了string指针。 但你这两句定义p和q的语句不符合语法!
以 string *p = "aaaa"; 为例: p是string指针。等号右侧的"aaaa"是字符串字面量,本身可以当作数组,所以在这里也会转为指针,但它是const char指针! const char* 不能自动转换为 string*,所以无法作为p的初值!编译器即报错。
q也是同理。
- 2 回答
- 0 关注
- 1528 浏览
添加回答
举报
0/150
提交
取消