指针不初始化直接赋值到底有什么错 例如:int *p; scanf("%d",p);printf("%d",p); 为什么出错

作者&投稿:郑急 (若有异议请与网页底部的电邮联系)
刚学c语言指针中,有这么个问题, int *p; int i; p=&i; scanf ("%d"~

你要明白,函数的参数意义是由书写这个函数的人决定的
对于scanf 它的第二个参数表示你要输入的变量的地址
你也可以自己写一个自定义函数
void setA(int a,int &b) //将a的值赋给b 第二个参数为b的引用
{
b=a;

}

void setB(int a,int* b) //同样的 目的也是将a的值赋给b 但这一次第二个参数要的是b的地址
{
*b=a;

}
//调用方式:
main()
{
int x=0;

//用两种方式将x的值赋成5

setA(5,x); //方法1
setB(5,&x); //方法2

}

int *p=0后, p是一个NULL指针
你当然既不能从里面读取数据(printf("%d", *p)
也不能写数据了(scanf("%d", p))

你的指针没有初始化,指针是一个野指针,或者称垃圾值,它有可能指向系统中某个重要的数据,你对它进行赋值破坏了系统的稳定性,所以出于安全性考虑系统会阻止你这样做.但如果你写的程序能绕过系统的安全性检查,那它就具备病毒的特征了,这也就是为什么使用指针时一定要对它进行初始化


指针没有指向任何对象。改为下面即可。
int i,*p=&i; //让指针指向变量i。
scanf("%d",p);
printf("%d",*p); //要加*才能输出i的值,否则输出i的地址。

p没指定地址,找不到存储空间

你这个指针木有分配空间

printf("%d",*p);

指针不初始化直接赋值到底有什么错 例如:int *p; scanf("%d",p...
答:你的指针没有初始化,指针是一个野指针,或者称垃圾值,它有可能指向系统中某个重要的数据,你对它进行赋值破坏了系统的稳定性,所以出于安全性考虑系统会阻止你这样做.但如果你写的程序能绕过系统的安全性检查,那它就具备病毒的特征了,这也就是为什么使用指针时一定要对它进行初始化 ...

指针在定义后必须要先初始化才能使用,为什么?如果不这样做,对程序有何...
答:不初始化也可以正确使用,只要在使用时正确赋值就可以,但是如果不初始化,则该指针为漂浮的指针,所指的地址不确定,而且指向的地址中的内容也不确定,如果乱用的话可能会影响其他程序的运行。

直接给指针变量赋一个整数值,程序能工作吗
答:第一个必死,第二个可能死(可能性很大);在栈内存中定义的指针,如果不初始化,那么它的值就是一个随机值了。所以第二个就是一个野指针,操作它出问题可能性很大。。第一个初始化为空指针,肯定不能写操作撒.

一个指针,如果一开始没有给它进行初始化,直接给它赋值是错的吗?那...
答:一个指针没有初始化,而且也没有被赋值(注意,赋值是指p=a,p是个指针,a是个变量)时,是不能取值的(*p),因为此时指针没有指向任何内存。一个指针数组,在定义时就给他分配了内存,当然可以直接给指针赋值了,但是取值(*p[5]),仍然是不行的。。。总而言之,指针只有指向了实际的内存才能被取...

为什么普通变量可以直接赋值初始化,而指针所指向的变量不可以直接赋值...
答:所以可以直接给变量赋值,是安全的。而如果没有对指针变量进行初始化的话, 就要改他指向的内存的话,这时候他指向的内存,不一定是为(这个“为”强调)我当前程序("当前程序" 强调)运行分配的内存,可能是其他在运行程序的内存。 影响到了其他程序的内存,那显然是不安全的。

指针在定义后必须要先初始化才能使用,为什么?如果不这样做,对程序有何...
答:因为未初始化的指针指向哪里,你根本就不知道,使用后结果不可预知,如果指向的内存中比较重要的地方,可能会导致系统异常,比如提示指向了一个不可用的地址之类的

C语言指针的赋值问题
答:p为指针,地址是未知的,如果直接赋值 p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。可以int*p=&a;或者int*p;p=&a;然后再对p进行操作 有错。注意大小写,还有 inta...

C语言中指针是否能够直接赋值,为什么?
答:l','l','o','\0'},在其他任何时候,它都表示一个字符串常量。而数组名也是一个指针常量,不能对常量赋值。所以 char a[] = "hello"; //正确,hello",并非一个字符串常量,而是相当于一个初始化列表 而 char a[6];a = "hello"; //错误,a为指针常量,不能修改,当然也不能赋值 ...

能直接给指针指向的数据赋值吗?
答:可以,但int *p;*p=7;这样不行。因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。这样才可以:int a,*p=&a;*p=7;实际上就是使a等于了7。

指针要初始化吗
答:C语言规范没有要求,有的编译器实现会给个警告,有的直接编译过。定义指针后可以不初始化,但实际上这个指针变量中已经有一个值了(就是分给这个指针变量的地方内存中原来的值,假设是0x1234)。但是用前一定要初始化,否则就是用去操作0x1234这个地方的内容,就会出问题,因为你并不知道把0x1234作为...