Difference between $* and $@ is::
"$*" All the positional parameters (as a single word) *
"$@" All the positional parameters (as separate strings)
If you pass three command-line arguments given to a bash script to a C program using ./my_c $@,
you get the result ARG[1] == "par1" ARG[2] == "par2" ARG[3] == "par3"
If you pass three command-line arguments given to a bash script to a C program using ./my_c $*,
you get the result ARG[1] == "par1 par2 par3"