編輯:如果您在此基本上不同意Fedora指南,請解釋爲什麼這種方法比傳統循環更客觀。據我所知,即使CERT標準沒有對使用指針變量的指針進行任何說明。如何安全地使用指針索引數組
我目前正在讀Fedora Defensive Coding Guide,並提出以下建議:
始終保持你正在使用的數組的大小的軌道。 通常,如果讓指針超過數組的最後一個元素,並且通過從該指針中減去當前位置來計算剩餘的 元素的數量,則代碼更爲明顯。 替代方法,每次當位置 高級時更新單獨的變量,通常不太明顯正確。
這意味着對於一個給定陣列
int numbers[] = {1, 2, 3, 4, 5};
我不應該使用經典
size_t length = 5;
for (size_t i = 0; i < length; ++i) {
printf("%d ", numbers[i]);
}
,而是這樣的:
int *end = numbers + 5;
for (int *start = numbers; start < end; ++start) {
printf("%d ", *start);
}
或本:
int *start = numbers;
int *end = numbers + 5;
while (start < end) {
printf("%d ", *start++);
}
- 我的理解推薦是否正確?
- 我的實現是否正確?
- 最後2箇中哪個更安全?
所有示例都有缺陷,因爲它們硬編碼數組的元素大小。除此之外,它是基於您使用哪一個的意見。 – 2501
我認爲推薦使用類似於C++迭代器array.end()的值,比如'numbers_end'而不是'numbers + 5' ... –
正如Alexei指出的,我們沒有看到任何**過去**你的例子中的指針。這些示例不會增加任何安全性。 – Djee