2011-06-07 113 views
1

該代碼非常簡單,但我抓住了結果。 我只是玩指針算術,並想打印出陣列 ,但我得到的數組加上3個數字。那3個額外的東西從哪裏來?這段代碼片段是如何工作的?

#include <stdio.h> 


int my_array[] = {1,3,5,6,73,343,34}; 

int *pointer_numeros; 

int main (void) { 
int i = 0; 
pointer_numeros = my_array; 

while(*pointer_numeros) { 

     printf("los numeros del array son %d\t %d\n\n", i++, *pointer_numeros++); 

      } 

      getchar(); 
      return 0; 

    } 
+0

就其本身而言,直到你把它插入一個止動元件基於指針的迭代將無法正常工作。在類似的筆記中,有沒有人知道動態數組(你使用malloc分配的類型)如何以及在哪裏存儲它們的大小,以及靜態數組爲什麼不存儲它們的大小? – susmits 2011-06-07 21:20:13

+0

@susmits:它是實現定義的,但你可以想象'malloc'可以在第一個元素之前立即存儲細節。靜態數組不需要存儲它們的大小! – 2011-06-07 21:35:39

回答

3

*pointer_numeros在數組末尾不計算爲false;它將繼續遍歷內存直到它碰到內容爲零的地址(但是這是未定義的行爲)。

您可以按照其他人的建議,終止您的數組爲零。但總的來說,你仍然會有一個問題:如果你的某些元素本身爲零,該怎麼辦?

+0

好的,我找到了你,但是又有多少數字讓它停止? – retarded 2011-06-07 21:15:53

+1

@retarded:它可能在任何地方。數組之外的內存通常是隨機垃圾(或者可能是其他變量),所以它很大程度上是偶然的,如果它會找到一個0. – 2011-06-07 21:17:11

1

你的意思寫:

int my_array[] = {1,3,5,6,73,343,34,0}; 

你的代碼迭代直到它在數組中找到一個零。你的數組裏沒有零。當它看到的指針指向爲0修復它像這樣

+0

是的,但我讀了C會自動在廣告的末尾添加'\ 0'數組,還是隻在char數組中? 。非常感謝 – retarded 2011-06-07 21:14:04

+2

只限於字符串。所以'char mystr [] =「hello」;'最後會有一個零,但是'char mystr [] = {'h','e','l','l','o'};''將不會。 – Nemo 2011-06-07 21:17:13

+0

完美,謝謝!說得通。所以我從這個簡單的東西中學到了很多東西,包括最後的0,爲什麼它在給定的時間停止,發生在包含0的內存地址時發生,並且它僅用於字符串數組額外0加入。 – retarded 2011-06-07 21:43:22

0

你的循環纔會停止:

int my_array[] = {1,3,5,6,73,343,34,0};