我正在编写一个Visual C ++程序来获取打印作业详细信息。 代码如下:
HANDLE hPrinter;
DWORD needed, returned, byteUsed,level;
JOB_INFO_2 *pJobStorage1=NULL;
level = 2;
GetJob(hPrinter, jobId, level, NULL, 0, &needed);
if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
cout << "GetJobs failed with error code"
<< GetLastError() << endl;
pJobStorage1 = (JOB_INFO_2 *)malloc(needed);
ZeroMemory(pJobStorage1, needed);
cout << GetJob(hPrinter, jobId, level, (LPBYTE)pJobStorage1, needed, (LPDWORD)&byteUsed) << endl;
cout << pJobStorage1[0].pPrinterName<<endl;
根据documentation,pJobStorage1的输出不是数组,但是,当我更改时IDE报告错误
pJobStorage1[0].pPrinterName
到
pJobStorage1.pPrinterName
所以,我想知道发生了什么。
答案 0 :(得分:0)
你有一个指针。只需看到声明JOB_INFO_2 *pJobStorage1=NULL
使用pJobStorage1[0].pPrinterName
和pJobStorage1->pPrinterName
,您可以访问pJobStorage1指向的第一个元素。
pJobStorage1.pPrinterName
无效,因为pJobStorage1
并且您无法拒绝指针。操作
如果您定义数组JOB_INFO_2 foo[5]
。 foo本身是第一个数组元素的地址/指针。因此,您可以使用foo而不是JOB_INFO_2 *
。因此,如果您有一个数组名称,则可以使用它而不是指针。指针还定义了特定类型元素的地址。您可以将它用作数组。
指针和数组具有可互换的用法。
struct A
{
int a;
};
void Foo()
{
A a[3], *pa;
pa = a;
A b;
// Accessing first element
b = *a;
b = a[0];
b = pa[0];
b = *pa;
// Accessing second element
b = a[1];
b = pa[1];
b = *(pa+1);
// accessing member in first element.
int c;
c = a[0].a;
c = pa[0].a;
c = pa->a;
c = (*pa).a;
}