本帖最后由 风扫地 于 2018-11-15 11:56 编辑
应该这么解释:
char *str;
没有初始化,也没有指向你可以用的空间。
str没被初始化,你存哪里去了你知道不?
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char* str = "123456\0"; //定义指针并初始化
这个意思是 内存里面已经有了 123456\0 这样的字符串(怎么有的不要你管),用str指向他(就是把他的首地址值赋值给str);
///////////////////////////////////////////////////////////////////////////////////////////////////////////
char a[20];
char *str = a;
scanf("%s",str);
这表示把你输入的数据存入到str指向的空间,而不是让str指向你输入数据存放的空间。你输入的数据会先存入某个缓存中(都存某个地方让你来指,系统得开多少内存让你存你输入的东西),再存入到str指向的空间。
再者说:scanf传入的是str这个指针变量的值,不是str这个指针变量的址,scanf函数也没办法改变str的指向。
体会一下他们的区别。
指针不初始化就对他指向的空间瞎写,胆子不小。