اره تا حدودی حرف شما درسته البته من مشکل رو حل کردم بدین صورت
#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;
}