2015-09-12 65 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