当涉及到需要指针参数的函数时,您犯了很多人都会犯的错误。
当函数需要指针作为参数时,并不意味着您盲目地声明一个指针并将其传递给函数。该函数要求的是address-of
现有的、有效的实体。
DWORD major, minor, build;
GetOSVersion(&major, &minor, &build);
The DWORD
上面的都是有效的,所做的就是将这些变量的地址传递给函数。
与此相关的另一个错误(不是错误,因为它会给出所需的结果,但仍然是一个“错误”)是声明一个指针,让它指向某个有效的地方,然后将其传递给函数。换句话说:
PDWORD major, minor, build;
major = new DWORD;
minor = new DWORD;
build = new DWORD;
GetOSVersion(major, minor, build);
delete major;
delete minor;
delete build;
or
PDWORD pmajor, pminor, pbuild;
DWORD major, minor, build;
pmajor = &major;
pminor = &pminor;
pbuild = &build;
GetOSVersion(pmajor, pminor, pbuild);
我见过以这种方式编写的代码。这表明程序员没有清楚地理解函数需要指针作为参数时的含义。程序员错误地认为指针must被声明,让它指向某个有效的地方,然后传递这个指针。
是的,您可以获得结果而不会崩溃,但是调用分配器(新建/删除)是浪费时间,或者如果不调用分配器,则会创建不必要的指针变量,这会不必要地混淆代码。
所以最简单的方法就是上面的第一个例子。只需声明非指针类型,并传递地址即可。