我现在有点困惑的匈牙利符号前缀在WinAPI中的CHAR字符串和WCHAR字符串。当我们使用CHAR字符串时,通常使用这样的前缀:
CHAR szString[] = "Hello";
我们有一个以零结尾的字符串szString,所以一切都很好。但是当我们使用WCHAR字符串时通常使用这样的前缀:
WCHAR pwszString[] = L"Hello";
表示指向终止于零的宽字符串的指针…但我们的类型不是这样的。指向终止于零的宽字符串的指针是WCHAR**或PWSTR*。我错了吗?为什么CHAR字符串是sz, wwsz而WCHAR字符串不是wsz ?
第二个例子容易引起误解(尽管并不少见)。它应该是以下两个中的一个:
WCHAR wszString[] = L"Hello";
WCHAR *pwszString = L"Hello";
由于数组可以在大多数需要指针的上下文中使用,因此一些程序员对这种区别有点草率。
匈牙利语已经过时了,但如果使用得当,它还是很有用的。
CHAR szString[]是CHAR * szString的同义词。都是指向字符串的指针。指向以零结尾的字符串的指针是CHAR*,指向以零结尾的宽字符串的指针是WCHAR*(而不是WCHAR**)。
现在,如果你想变得迂腐,你可以(错误地)声称CHAR[]"只是一个字符数组",在这种情况下,"rgc"可能是正确的前缀。