the only difference is in mathematics
when you print "123" you get 123 on the screen
if you print 123 you still get 123 on the screen.

but when you say:
"123"*123 it's wrong
but
123*123 is correct.

when you want to check if two number are equal
you say
if (a==123){}
but for strings
if (strcmp(a,"123")==0){}

when a user enter data from the keyborad
if he enters 123 is it string or number?
it depends on the data type of the variable you are asking.

for example
int a=0;
cin>>a; //enter 123 --->it's a number

but
char a[30];
cin>>a //enter 123 --->it's a string --->"123\0"
character \0 is used to informs as that a string ends here