所以我想知道如何在C中的数组/多维数组中存储多个RGB值,我不知道有多少个。
我听说过 malloc ,但我还不确定如何在多维数组上使用它。
E.g。我有 n rgb值:
array[n][3] = {
array[i] = {ri, gi, bi}, etc...
}
谢谢!
答案 0 :(得分:3)
您不需要多维数组来存储RGB值。只需声明一个包含3 int
的结构,并动态分配一个结构数组来存储值。 / p>
#include <stdio.h>
#include <stdlib.h>
struct RGB {
unsigned char R;
unsigned char G;
unsigned char B;
};
int main(void)
{
//allocate dynamically array of 10 RGB struct's
struct RGB *rgb = malloc(10*sizeof(struct RGB));
//white color
rgb[0].R = 255;
rgb[0].G = 255;
rgb[0].B = 255;
//black color
rgb[1].R = 0;
rgb[1].G = 0;
rgb[1].B = 0;
/*.............*/
printf("the R G B of the white color is %d %d %d\n",rgb[0].R,rgb[0].G,rgb[0].B);
printf("the R G B of the black color is %d %d %d\n",rgb[1].R,rgb[1].G,rgb[1].B);
//free dynamically allocated memory
free(rgb);
return 0;
}
答案 1 :(得分:0)
请使用:
/* N is the number of rows . N here is 3 */
if (( n = malloc( 3*sizeof( int* ))) == NULL )
{ /* error */ }
for ( i = 0; i < 3; i++ )
{
if (( c[i] = malloc( sizeof(int))) == NULL )
{ /* error */ }
/* probably init the row here */
}
/* access matrix elements: n[i] give you a pointer
* to the row array, n[i][j] indexes an element
*/
n[i][j] = 12;
正如其他人用结构更容易实现RGB一样:
struct RGB_t {
char BLUE;/* I have heared each color is from 0 to 255 */
char RED;
char GREEN;
}
typedef struct RGB_t RGB;
答案 2 :(得分:0)
如果您想要一个在编译时未知的大小数组,那么您想要动态分配内存是正确的。
在这种情况下,您实际上会使用指针而不是数组。尽管指针和数组在c中实际上并不完全相同,但为了简单起见,它们的行为方式非常相似。
malloc需要Stdlib
#include <stdlib.h>
这样的情况也可以创建一个结构来处理一组颜色更简单(假设你的颜色是1字节值,所以我们使用char - 如果它们可能大于255,你会需要使用更大的类型:
typedef struct color_t {
unsigned char r;
unsigned char g;
unsigned char b;
} color;
然后你可以按如下方式分配内存:
int n = 200; //However many there are, you will need to know this before allocating memory
color* colors = (color*) malloc(sizeof(color)*n);
Malloc将保留所要求的字节数,并返回指向内存开头的指针。因此,您使用sizeof()来获取颜色结构的字节大小,然后将其乘以您需要的值。
然后,您可以使用
在内存中寻址结构int i = 20; //Where i is the particular color you want to access
colors[i].r = 0;
colors[i].g = 0;
colors[i].b = 0;
完成内存后,您需要使用
释放它free(colors);
如果你不这样做,程序将继续使用这个内存,即使你不再有实际的颜色变量 - 例如,如果它只存在于一个函数内。
如果你没有结构,那么分配就像这样:
unsigned char* colors = (unsigned char*) malloc(sizeof(unsigned char)*n*3);
然后访问看起来像这样,因为每次都会跳过内存中的3个变量:
colors[i*3] = 0;
colors[i*3+1] = 0;
colors[i*3+2] = 0;