#include <stdio.h>
int main(void)
{
int *p=NULL;
//在这里定义了一个指针变量,
//也就是我定义了一个可以装地址的变量
//此时我们还不清楚这个地址中装了什么
printf("input a:");
scanf("%d",p);
//这里需要一个变量的地址,用来存放输入的数据。
//我们的数据放到哪个地方。你认为是放到了P所指的变量吗,那么哪个变?也即是那个空间在哪?
//要存储数据必须申请空间。
//p没有指向任何变量,也就是我们没有向系统申请任何空间。
//在这个程序中,我们只定义了一个变量,申请了一个空间,那就是用来装指针变量p的那个空间
正解:
int *p=NULL;
int a=0;
p=&a;
scanf("%d",p);
//上面的例子也许不是很明显,那么下面这个就很清楚了
错误:
char *p1=NULL;
scanf("%s",p1);
//为什么会错,因为没有空间存储
正确:
char *p1=NULL;
char str[256]={0};
p1=str;
scanf("%s",p1);
//那么现在来看一下这个
int *p2=NULL;
scanf("%d",&p2);
printf("%d",p2);
//这个是不会有任何问题的,正如我上面讲的一样,因为我们定义了变量p2,我们向系统申请了空间,现在有地方放数据了
}
总结:一句话,要存储数据,一定要有储存空间。
注意: 没有给指针变量赋初值是不负责任的表现,是一种不受人欢迎的代码风格,如果你知道自己在
干什么,就不要这么干。
另外,你说的另一个问题,为什么TC中可以,vc中不可。那是编译器的问题。不用深究,没有任何意义。推荐用vc
以上是个人感悟,希望对你有帮助。