اره تا حدودی حرف شما درسته البته من مشکل رو حل کردم بدین صورت
 #include <gtk/gtk.h>

struct hamid{
GtkWidget *entry1;const gchar *str;
}*a;

void hi(GtkWidget *widget,gpointer data){

g_print(a->str);
}

int main(int argc,char *argv[]){

gtk_init(&argc,&argv);

GtkWidget *window;

GtkWidget *button;

GtkWidget *table;

a=(hamid*)g_malloc(sizeof(hamid));
a->entry1=gtk_entry_new();

a->str="1";

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

button=gtk_button_new_with_label("Click");

table=gtk_table_new(3,3,TRUE);

gtk_container_add(GTK_CONTAINER(window),table);

gtk_table_attach_defaults(GTK_TABLE(table),button, 0,1,1,2);

gtk_table_attach_defaults(GTK_TABLE(table),a->entry1,0,3,0,1);

g_signal_connect(G_OBJECT(button),"clicked",G_CALL BACK(hi),(gpointer)a);

gtk_widget_show(window);

gtk_widget_show(button);

gtk_widget_show(a->entry1);

gtk_widget_show(table);

gtk_main();

return 0;

}