Mình đang chập chững học lại C, mong các bạn giúp đỡ 2 câu hỏi 
1/ Khi viết (define) 1 hàm, làm sao mình có thể xác định được nên define hàm đó là hàm trả trị (các kiểu int ...) hay là hàm ko trả trị (void) ? Nói tóm tắt là khi nào thì sử dụng kiểu void cho hàm và khi nào thì sử dụng các kiểu bình thương (như int ...) cho hàm ?
2/ Mình đọc trong 1 cuốn sách C có example sau :
Code:
#include <stdio.h>
struct vietwow {
int viet;
int wow;
};
void ham(struct vietwow *test) /* su dung struct point la`m parameter cua 1 ha`m la` o day */
{
test->viet = 10;
test->wow = 20;
}
int main(void)
{
struct vietwow haha;
ham(&haha);
printf("gia tri viet : %d\n", haha.viet);
printf("gia tri wow : %d\n", haha.wow);
return 0;
}
Nó giải thích với vd trên, nếu ta pass thẳng struct vào function ham (tức là ham(haha) ) thay vì pass pointer của struct vào function ham (tức là ham(&haha) như vd), thì lúc này các thay đổi value của ta chỉ ảnh ưởng trong local copy mà ko được return lại hàm main. Nguyên văn như sau :
"Another thing to notice here: if we passed the stuct instead of a pointer to the struct, what would happen in the function build_beejs_frog() when we changed the values? That's right: they'd only be changed in the local copy, and not back at out in main(). So, in short, pointers to structs are the way to go when it comes to passing structs to functions."
Vậy mình có thắc mắc là nếu ta đổi kiểu của function ham thành kiểu trả trị (thay vì hiện tại là void - ko trả trị) thì ctrình có work ko ?
Thân,