指针的小问题.

来源:百度知道 编辑:UC知道 时间:2024/05/19 08:47:38
我注释的那一行,注释后面的是正确的,我是知道的,但是,为什么用我注释前面的就不对哪?而且,如果我要是对p进行过指向,用前面的也是对的,
但是,没初始过的时候用前面的就不对,请解释一下.谢谢.
#include <stdio.h>
void main()
{
int a,*p;
a=1;
*p=a;//p=&a;
printf("%d\n",*p);
}

指针在任何情况下,都必须先初始化再使用。因为你在定义一个指针变量的时候,如果没有初始化,那么指针指向的是一个随机值。C语言编译系统为了确保操作系统的安全,不允许用一个常数去初始化一个指针变量(如p=a),也不允许试图用一个常数去修改一个未被初始化的指针所指向的单元里的内容(如*p=a,p事先未被初始化)。当一个指针变量被初始化以后,对于*p就有了明确的指向关系,像*p=a这样的赋值就是合法的了。
另外值得注意的是,*p=a和p=&a是完全不同的两种操作。*p=a是对p指针所指向的单元赋值,而p=&a是对p这个指针变量进行初始化。对p这个指针变量本身的值,我们在实际操作中并不一定很关心,往往用到的就是*p的值。
个人看法,只供参考!

指针指向的应该是地址,在没给指针变量赋值之前它的指向是不确定,可以指向任何地方由系统决定,所以直接*p=a是不对的

区分以下几种表示方法:
int *p=&a; 表示p是一个int型指针,p的地址就是a的地址,指向a
int *p;*p=&a; 表示p是一个int型指针,指向a的地址,**p的值是a
int *p;*p=a; 表示p是一个int型指针,指向a(但p的地址不是a的地址)

恩,是指针初始化问题。同意楼上意见

在c语言中,变量的使用规则是为了保证数据的可靠性,变量使用时必须初始化,否则会产生意想不到的严重后果!在这里说明一下:
指针变量也其他变量一样存贮数据,只不过指针变量所存贮的数据比较特殊,是一个其他变量的地址。所以这里的p与a的初始化是等价的!!!
变量的初始化格式是:变量名=数据。
而这里的*号与=号都是c语言中的运算符,*号的优先级高于=号所以程序运行的机制所下:
*p=a;
在p未经任何初始化的时候程序就调用了*号运算符对它进行操作,结果是显然的这时p中数据不一定是可靠的,所以会造成意想不到的错误的产生!所以这种写法是错误的!QQ:199014280

int *p;
在声明变量的时候 * 这个操作符号表示p是一个指针;

非声明代码中
*p 表示取 p的内容