2015-09-12 68 views
-2

這是一段時間,因爲我不得不在C編程,我完全忘記了如何使用指針。所以對於我的項目,我必須製作一個程序,讀取txt文件並創建數字的直方圖。C指針和訪問數組

該程序必須

void hist_2d(
    int *head, /* A pointer to the input tiles. */ 
    int w, /* The width (in pixels) of the tile. */ 
    int h, /* The height (in pixels) of the tile. */ 
    int stride, /* Number of pixels between 2 contiguous rows. */ 
    int *bins, /* Array of input bins for the desired histogram. */ 
    int m, /* The number of input bins. */ 
    int *out /* An array in which to store the output histogram. */ 
) 

我的問題是與*頭和訪問數組。

因此,例如圖像

[1,2,3,4,5,6; 
7,8,9,10,11,12; 
13,14,15,16,17,18; 
19,20,21,22,23,24] 

在pixels.txt這將是:

1 
2 
3 
... 

直方圖應該在瓷磚計算,所以我的例子瓷磚可能是2x3這將是:

[1,2,3; 
7,8,9] 

做直方圖的一部分很容易獲得他們的數據,我不聯合derstand。根據我的理解* head是每個tile開始點的地址數組,但實際上如何獲取值?以及如何獲得下一個值?

Head [0]會得到我的地址還是第一個值?

謝謝你,很抱歉,很長的文章,但我想確保我提供了所有需要的信息。

+0

*據我所知* head是一個地址數組* *'* head'是一個整數。 'head'是一個指向整數的指針。 'head [0]'相當於'* head'。如果'head'是指向一個能夠保存多個整數的內存區域的指針,那麼可以將它視爲一個數組並使用'[]'運算符訪問元素。 –

+0

你有任何的代碼?在我看來,你的理解很好。編寫一個示例程序可能會更有益處,它只會從磁盤上的文件中讀取數據,然後嘗試訪問它。 –

+0

我錯過了Filipe的報價。他完全正確。我仍然建議先寫一個簡單的程序。好像你試圖一次解決整個問題。 –

回答

1

好的,聽起來好像head是指向數組int的第一個元素的指針,其中每個元素(可能)是瓦片左上角的索引。在你的2x3瓷磚的例子中(如果填充數組的人使用這些數字作爲索引),數組將包含[1,4,13,16]。

下面是如何處理數組的元素:

int h[4]; 

h[0] = 1; 
h[1] = 4; 
h[2] = 13; 
h[3] = 16; 

printf("%d\n", h[0]); // will print "1" 

int n = h[2]; // the value of n is now 13 

是否說清楚的事情了?

+0

呵呵,我沒有在問題中看到'C++'-tag ......等等,沒有一個!另外,'2 * 3!= 4'。 – EOF

+0

而且,如上所述,它不是一個數組。這是一個指針。 –

+0

@EOF:你說得對C/C++,習慣的力量,我會編輯。至於指數,我從OP的例子中猜測出,OP是從圖像的1索引角度思考的。 – Beta