- 什么是在具有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,对吗?
不是真的,那只是将temp指针设置回共享内存缓冲区的开始位置。如果你想打印内容内存出来,你可以简单地做:
for(nCount = 0; nCount < 24; nCount++)
printf("%p: %d\n", ptrMem+nCount, *(ptrMem+nCount));
这不会改变什么ptrMem指向了(因为我们从来没有覆盖它),我们想知道的内存地址(我们打印一个"%p"
(指针格式字符串)和一个"%d"
(int格式字符串)
你用来处理分配的内存,其他的你保留记住以后可以免费使用的内存(ptrMem + nCount)具有什么值(解除引用的版本)你的代码。 – 2013-04-11 15:08:36
取决于代码的其余部分,例如你可以增加一个来通过内存 – Mark 2013-04-11 15:09:00
有很多原因可以做到这一点。你可以添加更多信息吗? – 2013-04-11 15:09:22