关于 void *
程序代码:void *find(const void *first, const void *last, const void *value, size_t size) {
const char *f = (const char *)first;
while(f != last) {
if(!memcmp(f, value, size)) {
return (void *)f;
}
f += size;
}
return NULL;
}有个地方不可以用 C++ 的 template, 所以只能用 void * 实现
对于 const void *value 来说, 传入左值可以运行的很好, 但是右值这个函数就无法正常运作了
是否有方法让这个函数对传入的右值也很好的运作
例如 :
程序代码:#include <stdio.h>
#include <memory.h>
void *find(const void *first, const void *last, const void *value, size_t size) {
const char *f = (const char *)first;
while(f != last) {
if(!memcmp(f, value, size)) {
return (void *)f;
}
f += size;
}
return NULL;
}
int main(int argc, char *argv[]) {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
int value = 2;
printf("%p", find(a, a + sizeof a / sizeof(int), 2, sizeof value)); //2 为右值, 无法被传入 const void *
}C 学的不是很好
上面所说的左值和右值是 C++ 中的概念, 此处 C 和 C++ 的概念差别应该不大
[此贴子已经被作者于2018-10-11 22:05编辑过]



