我是 C 的新手。所以這是我的問題。使用指標時使用負索引是否被認為是一種不好的做法?
考慮以下代碼:
#include <stdio.h>
void loopDown(int *intPointer, int maxStep);
int main() {
int myArray [10]={0};
myArray[0] = 5;
int myMaxStep = 5;
int *myPointer = myArray myMaxStep;
// loopDown(&*myPointer,myMaxStep); //Bad practice suggested by Jonathan
loopDown(myPointer,myMaxStep); //Edited version
return 0;
}
void loopDown(int *intPointer, int maxStep){
int i;
int j;
for(i=0;i<=maxStep;i ){
// printf("%d",i);
j = -1*i;
printf("%d\n",intPointer[j]);
}
};
它的輸出:
0
0
0
0
0
5
與 python(我使用的另一種語言)不同,c 沒有快速切片陣列的方法。而且我認為指標對我來說是一個非常方便的解決方案,可以“剪切”陣列而不實際剪切它。這會被認為難以閱讀/不好的做法還是有更好的情況?
如果代碼的其他部分有其他不好的做法,請隨時指出。我仍在學習。謝謝 :)
uj5u.com熱心網友回復:
電腦不在乎。編譯器不在乎。C 標準定義了指標的負偏移量的語意。正確使用它們的程式將按需要運行。
所以唯一的考慮是人類。人是麻煩。他們誤解了事情,他們犯了錯誤。他們養成習慣,做出假設。他們中的一些人可能會假設“陣列索引”是非負的,即使 C 標準中沒有這樣說。
使用負指標很好,但要確保容易出錯的人知道你在做什么。有時負指數自然會出現。有一些信號過濾器根據一些輸入和一些先前的輸出計算下一個新輸出。在這種情況下,whenOutputPointer指向下一個輸出應該存盤的地方,前面的輸出自然是OutputPointer[-1], OutputPointer[-2],以此類推。
所有源代碼都應該有很好的檔案記錄,無論它是否使用負偏移。讓讀者清楚地了解軟體在做什么以及為什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462793.html
