1. GArray添加元素的时候,不是指针赋值存储,而是对要存储的元素的实际内存进行拷贝。(所以GArray一般存储的是某个对象,而不是某个对象的指针)

  2. GArray并没有在GType类型系统注册。

alt text

1 相关函数总结

1.1 g_array_new

  /**
 * @zero_terminated: 如果数组在末尾应有一个额外的元素并设置为0,则为%TRUE
 * @clear_: 如果在分配时应将#GArray元素自动清除为0,则为%TRUE
 * @element_size: 每个元素的大小(以字节为单位)
 *
 * 创建一个新的具有引用计数1的#GArray。
 */
GArray*
g_array_new (gboolean zero_terminated,
             gboolean clear,
             guint    elt_size);

1.2 g_array_append_vals

/**
 * @data: 要存储元素的地址
 * @len: 要存储多少个元素
 * 
 * 实际执行的:memcpy(数组末尾地址, data, len * 元素的大小)
*/
GArray*
g_array_append_vals (GArray       *farray,
                     gconstpointer data,
                     guint         len)

2 分析为什么不能存储指针

alt text

3 GArray适用场合

  1. 创建一个GArray存储GstCapsArrayElement结构体

     g_array_new (FALSE, TRUE, sizeof (GstCapsArrayElement));
    
  2. 把一个元素添加到 GArray 里面(注意:传入的不是指针)

    alt text