啊,我想我現在明白了這個問題。我想你想知道如何在data[10]
之後停止閱讀,因爲儘管你已經分配了五十萬條目,但現在遠沒有滿足所有這些元素。
請注意,我們假設我們自己的「填充」的含義。 C沒有空數組元素的概念。
在C中,保留size
變量以及超大的數組是非常常見的。所以,你可以做類似的東西:
int data[500000]={25,0,0,0,0,98,0,0,13,0,857};
int size = 11;
for(int i=0;i<size;i++) {
if(data[i]==0) {
continue;
}
printf("%d\t",data[i]);
}
(我加括號您if
塊 - 中省略他們的習慣沒有得到)
你似乎想跳過零,我已將其留下。
當您添加元素時,您需要增加大小。
data[size] = newValue;
size++;
...或者更簡潔慣用ç...
data[size++] = newValue;
...,你需要確保無論您的陣列的作品,也看到長度。例如,你不能有一個功能findHighest(int data[])
- 它必須是findHighest(int data[], int size
。當你在C研究中取得進步時,你會發現struct
可以幫助你更好地實現這一目標。
的這個動作的一個例子是read
系統調用:
int length = read(file, buf, count);
buf
是一個長度< = count
的char[]
。 read()
將讀取最多count
的一些字節數,並返回length
。 buf[0]
到buf[length-1]
包含您要使用的字節。 buf[length]
以上是垃圾。
另一種方法是,以確保數組中的第一不相關值包含指示「沒有更多的看到」 定點值。例如,您可以使用-1
,如果您確定這永遠不會成爲有效的值。一個非常簡單的方法是在初始化時用-1
s填充陣列(使用memset()
)。或者,確保您在延長長度時在data[index_of_last_value + 1]
處編寫標記值。
標準C字符串處理函數是使用標記的代碼示例。 NULL
(零,'\0'
)指示字符串的結尾,該字符串通常存儲在較長的緩衝區中。
您的代碼表示不打印零。數組中只有四個值不爲零。你期望會發生什麼? – slim
另外當你只用11個值初始化時,你爲什麼要使用'500000'? – slim
如果你需要一個包含50萬個「int」值的數組,堆棧可能不是最好的地方。改用'malloc()'或'calloc()'。 –