考虑http://c-faq.com/misc/hexio.html的例子,有什么理由有一个额外的指针'静态'字符缓冲区?为什么我们不能逃脱retbuf
?为什么在函数中有一个'静态'定义?
回答
您需要一个指针,以便您可以存储更改的地址。如果你只有retbuf
,你将不得不设计这个函数来使用一个变化的索引变量。例如: -
int ind = sizeof(retbuf)-1;
retbuf[ind] = '\0';
等
注意数组不是指针。数组是固定大小的内存区域。指针是一个地址。
感谢您的输入,但我仍然没有完全理解。考虑以上代码片段: static char retbuf [33]; char * p; p =&retbuf [sizeof(retbuf)-1]; 为什么我们需要保留额外的指针'p'到'retbuf'?如果我们填入'retbuf',然后从函数中返回('return retbuf'),它将始终指向缓冲区的第一个元素,我在这里错了吗? – Mark 2011-01-12 23:56:09
@Mark,首先,`p`并不总是等于函数末尾的`retbuf`的第一个元素。作为一个简单的例子,如果`num`为0,`p`将保持等于'retbuf + sizeof(retbuf) - 1`。其次,在函数中使用*来跟踪要写入哪个位置。 – 2011-01-13 00:07:25
如果没有static
关键字,缓冲区将被分配到堆栈上 - 并在函数返回给调用者时释放。使用static
确保缓冲区在函数返回后有效。
- 1. 为什么const在静态函数中是未定义的?
- 2. 在OCaml中为递归函数定义一个静态变量
- 3. 如何在函数中定义一个类的静态成员?
- 4. 为什么CanvasRenderingContext2D.createLinearGradient()不是静态函数?
- 5. 为什么这个静态函数没有调试符号?
- 6. 为什么没有定义函数javascript
- 7. 为什么在一个方法中看不到“私有静态”?
- 8. 为什么静态函数消除Xcode中未定义的符号?
- 9. 什么存储类是一个函数内部的静态,为什么?
- 10. 为什么不在LinkedList中定义ListIterator的静态类?
- 11. 在非静态类中声明一个静态方法的意义是什么?
- 12. 为什么静态成员函数只能在类定义中声明为静态而不是在其自己的定义中声明?
- 13. 为什么属性在函数中定义时未定义?
- 14. 为什么“this”在胖箭头函数定义中未定义?
- 15. 为什么我的公共静态数组未定义?
- 16. 这个定义为什么会返回一个函数?
- 17. 为什么main()函数没有在if'__main__'中定义?
- 18. 为什么jsp中的EL函数必须声明为静态?
- 19. PHP |为什么我应该使用公共静态/私有静态函数而不是公共/私有函数?
- 20. 为什么Java中没有静态类
- 21. 静态成员函数和全局函数有什么不同?
- 22. 为什么随机变量的行为在定义为静态或非静态时有所不同?
- 23. 为什么我只能从静态函数中访问静态成员?
- 24. 如何从另一个静态函数调用静态函数
- 25. Python 3 - 为什么这个变量没有在这个函数中定义
- 26. Swift中静态函数和非静态之间有什么区别?
- 27. C++:有没有办法定义一个静态数组内联?
- 28. 如何定义静态成员函数?
- 29. 为什么私有静态属性为
- 30. 为什么函数重定义比调用第一个更快?
你问我们为什么需要`static`关键字,或者为什么有一个'char * p'指针指向'retbuf`? – 2011-01-12 07:20:54