- 让 ptrTemp 也指向它有什么意义,我如何利用两者?
这与链表中的“头”指针相同。
ptrTemp = ptrMem; // here both pointers point to the start
// of your shared memory location
当你运行你的循环时,你一次又一次地执行这个:
*ptrTemp++ = x;
现在ptrTemp
不再指向共享内存位置的开始。在这个特定的例子中,你知道你循环了 24 次(你的指针增加了 24 次),所以你可以使用指针算术并“回退”地址,但为什么要麻烦呢?对于一些额外的字节,您可以只使用一个新指针,并且始终可以方便地引用缓冲区的开头,这很可能需要传递/引用。
请记住,名称ptrTemp
中包含“Temp”,这意味着它用于某种临时存储。
编辑:操作*
员要取消引用一个指针(或这样声明)。所以在你的代码中:
ptrTemp = ptrMem; // Assigning one pointer to another, no need for the * here since
// they are both pointers.
*ptrTemp++ = x; // here you are assigning a value to the memory pointed to by ptrTemp
// to assign a value you need to dereference, then we increment ptrTemp
- 如果我想打印内存,我必须这样做;ptrTemp = ptrMem,对吧?
不是真的,那只会将临时指针设置回共享内存缓冲区的开头。如果您想打印内存的内容,您可以简单地执行以下操作:
for(nCount = 0; nCount < 24; nCount++)
printf("%p: %d\n", ptrMem+nCount, *(ptrMem+nCount));
这不会改变 ptrMem 所指出的内容(因为我们从不覆盖它)我们想知道哪个内存地址 (ptrMem+nCount) 具有什么值(它的取消引用版本)所以我们打印一个"%p"
(指针格式字符串)和一个"%d"
(int 格式字符串)