C 对普通数组和garrays使用sizeof()
这是一个对GArrays进行排序的实践程序,我使用了sizeof()来了解数组的大小 从逻辑上考虑,sizeof(x)应该是24,即6个整数*每个整数的大小,即4-6*4 但是当我把这些整数放到我的GArray中时,大小是8 为什么是8,为什么不是32。。当g_数组_new以2的幂分配字节时?24附近2的最近幂为2^5,即32C 对普通数组和garrays使用sizeof(),c,sizeof,glib,C,Sizeof,Glib,这是一个对GArrays进行排序的实践程序,我使用了sizeof()来了解数组的大小 从逻辑上考虑,sizeof(x)应该是24,即6个整数*每个整数的大小,即4-6*4 但是当我把这些整数放到我的GArray中时,大小是8 为什么是8,为什么不是32。。当g_数组_new以2的幂分配字节时?24附近2的最近幂为2^5,即32 /************************************************************************************
/*************************************************************************************************************
* FILE NAME : ex-garray-6.c
*
* DESCRIPTION : sort Garray using GCompareFunc (Not used in GIMP, Gaim or Evolution)
*
************************************************************************************************************/
#include<glib.h>
#include<stdio.h>
/*************************************************************************************************************
* FUNCTION NAME : print_arr
*
* DESCRIPTION : prints entire array using len and g_array_index
*
* RETURNS : void
*
************************************************************************************************************/
void print_arr(GArray* arr)
{
int i = 0;
printf("\n Array : \n");
for (i = 0; i < (arr->len); i++)
{
printf("%d\n", g_array_index(arr, int, i));
}
}
/*************************************************************************************************************
* FUNCTION NAME : compare_ints
*
* DESCRIPTION : utilized qsort() to sort elements of the unsorted array.
* arguments are two gpointers.They are typecasted to int pointers
* int the function
*
* RETURNS : int - -ve if first arg is smaller than second arg
* 0 if first arg is equal to second arg
* +ve - second arg is smaller than first arg
*
************************************************************************************************************/
int compare_ints( gpointer* a, gpointer* b)
{
int* x = (int*)a;
int* y = (int*)b;
return (*x - *y);
}
/*************************************************************************************************************
* FUNCTION NAME : main.c
*
* DESCRIPTION : main.c declares GArray,allocates memory to it, appends 6 integers into the array,* uses g_array_sort to print the array, uses print_arr function to print the array * frees array at end.
*
* RETURNS : SUCCESS
*
************************************************************************************************************/
int main(int argc, char** argv)
{
// 1. declare GArray pointer variable and allocate memory to it
GArray* arr = g_array_new(FALSE, FALSE, sizeof(int));
// g_array_set_size(arr,8); - didn't work to fix size to 8 bytes
// 2. initialize int array of 6 elements say x
int x[6] = {500,400, 500, 700, 200, 300};
// 3. append in the array
arr = g_array_insert_vals(arr,0, x, 6);
printf("\n size of x : %d \n size of arr : %d", sizeof(x), sizeof(arr));
// 4. print the array
print_arr(arr);
/* 5. sort the array using
g_array_sort(
<GArray pointer variable>,
(GCompareFunc)<name of the compare function>);
- compare function uses qsort()-
-returns -ve a<b
-returns 0 a = b
-returns +ve b = a
*/
/* 5.5 alternate sorting function -
g_array_sort_with_data(
<same as g_array_sort>,
<same as g_array_sort>,
<gpointer to user-data>); */
printf("\n Array after sorting \n ");
g_array_sort(arr, (GCompareFunc)compare_ints);
// 6. print garray
print_arr(arr);
// 7. free garray
g_array_free(arr, TRUE);
}
/*************************************************************************************************************
*文件名:ex-garray-6.c
*
*描述:使用GCompareFunc对Garray进行排序(不用于GIMP、Gaim或Evolution)
*
************************************************************************************************************/
#包括
#包括
/*************************************************************************************************************
*功能名称:print\u arr
*
*描述:使用len和g_数组索引打印整个数组
*
*退货:作废
*
************************************************************************************************************/
无效打印(GArray*arr)
{
int i=0;
printf(“\n数组:\n”);
对于(i=0;i<(arr->len);i++)
{
printf(“%d\n”,g_数组_索引(arr,int,i));
}
}
/*************************************************************************************************************
*函数名称:compare_ints
*
*描述:利用qsort()对未排序数组的元素进行排序。
*参数是两个gpointer。它们被类型化为int指针
*整型函数
*
*如果第一个参数小于第二个参数,则返回:int--ve
*如果第一个参数等于第二个参数,则为0
*+ve-第二个参数小于第一个参数
*
************************************************************************************************************/
整数比较整数(gpointer*a,gpointer*b)
{
int*x=(int*)a;
int*y=(int*)b;
返回(*x-*y);
}
/*************************************************************************************************************
*函数名:main.c
*
*DESCRIPTION:main.c声明GArray,为其分配内存,在数组中追加6个整数,*使用g_array_sort打印数组,使用print_arr函数打印数组*最后释放数组。
*
*回报:成功
*
************************************************************************************************************/
int main(int argc,字符**argv)
{
//1.声明GArray指针变量并为其分配内存
GArray*arr=g_数组_new(FALSE,FALSE,sizeof(int));
//g_array_set_size(arr,8);-无法将大小固定为8字节
//2.初始化6个元素的int数组,比如x
intx[6]={500400500700200300};
//3.在数组中追加
arr=g_数组插入值(arr,0,x,6);
printf(“\n x的大小:%d\n arr的大小:%d”,sizeof(x),sizeof(arr));
//4.打印阵列
打印arr(arr);
/*5.使用
g_数组_排序(
,
(GCompareFunc));
-比较函数使用qsort()-
-返回-ve a如注释中所述,arr
不是数组,它是指向GArray
的指针(它也不是数组,cf)
x
是一个数组,所以它的大小是一个项目的大小*项目的数量
,所以6*sizeof(int)
arr
是一个指针,指针大小取决于所使用的编译器和系统,在您的例子中,int*
的大小为8。是的,我得到了答案:
加里是一座建筑物
有两个元素,一个是gchar类型,另一个是gunit类型
gchar的大小为1字节
gunit有4个字节
所以这里的sizeof(GArray)或sizeof(arr)是1+4=5,然后将其扩展到2的最近幂,即2^3是8:)sizeof(arr)
的计算结果是指针的大小,而不是arr
中的元素数……所述数组不是指针。不是直接的,但绝对相关。GArray
的可能副本包含一个gchar*
和一个guint
,而不是gchar
和一个guint
。数组的大小和对齐在大多数常见的平台上,guint
很可能是4,但是gchar*
的大小和对齐可能是4或8,这取决于平台。此外,您的arr
类型是GArray*
,而不是GArray
,因此它的大小可能是4或8,这取决于平台。哦……是这样吗?谢谢或者是洞察力…:)