引用数组的函数之间有什么区别:
// reference to array
void f_(char (&t)[5]) {
auto t2 = t;
}
Run Code Online (Sandbox Code Playgroud)
和简单的数组:
// just array
void f__(char t[5]) {
auto t2 = t;
}
Run Code Online (Sandbox Code Playgroud)
作为参数?
调用代码为:
char cArray[] = "TEST";
f_(cArray);
f__(cArray);
char (&rcArr)[5] = cArray;
f_(rcArr);
f__(rcArr);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下, t2都是char *,但在第一个函数中,我的VS2019显示函数内的t具有类型char(&t)[],而第二个函数内的t具有类型char *。
那么到底这些功能之间有什么实际区别吗?
我想在内存中的结构后面添加一个字符串。如何检查我是否动态分配了正确数量的字节?
例子:
const wchar_t* add_str = L"test string";
struct test_{
wchar_t* name;
size_t namelen;
} test;
void* ptest_void = malloc(sizeof(test) + wcslen(add_str)*sizeof(wchar_t));
// i cant dereference void*, hence, cant check sizeof(*ptest_void)
// then i try to get sizeof of a ptr which was cast to (test_*):
test_* ptest = (test_*)ptest_void;
size_t ptest_sz = sizeof(*ptest);
// ptest_sz has the size of _test struct, but without size of add_str...
free(ptest_void);
Run Code Online (Sandbox Code Playgroud)