{
char *p1;
scanf("%s",&p1);
printf("%s",&p1);
}是能够正确执行的,scanf只是得到后面参数的地址,然后将输入的字符串写到对应的地址上,而不管你有没有在这个地址上定义一个变量,这里的&p1就是指针本身的地址,而printf也只是将指定地址的内容取出显示而已
----------------解决方案--------------------------------------------------------
这里虽然是定义了指针,但是实际上只是一个址的操作而已,并没有用到指针的功能
----------------解决方案--------------------------------------------------------
而void main()
{
char *p1;
scanf("%s",p1);
printf("%s",p1);
}应该避免这样操作,因为指针p1并没有指向一个分配的地址,它只有一个随机值,当将输入的字符串写到这个p1的地址上时这样做是很危险的,如果这个地址原来没有数据,则不会发生任何错误,如果这个地址原来有重要的数据则可能导致系统的崩溃。哈哈
----------------解决方案--------------------------------------------------------