如何才是指针的初始化,初始化的方式有几种呢?int *p;
以上是指针的定义吧。(此时仅是定义,但没有初始化,所以说指针可以先定义,再初始化)int *p=10;
以上是指针的定义同时初始化吧。int *p;
p=new int;
以上是指针的先定义,后初始化吧?所以我认为,指针的初始化有两种方式,
一种是定义的同时初始化,如:
int *p=7;
另一种是,先定义,再初始化
int *p;
p=new int;除了这两种初始化方式,还有别的方式吗?

解决方案 »

  1.   

    int *p=10; 
    以上是指针的定义同时初始化吧。
    ============
    这个不行的,没分配空间
      

  2.   

    int *p=10;  不能这样写
    可以这样
    int *p = NULL; 
    p=new int; 
    *p = 10;
    也可以这样:
    int *p = NULL; 
    p=new int(10); 
      

  3.   

    int *p=7; 
    此时指针指向一个常量空间,这个空间里的值是不可改变的,
    int *p; 
    p=new int;
    此时指针指向你自己给它分配的空间,这个空间里的值在你把空间释放掉值钱你爱怎么变怎么变。
    即:
    int *p=7;
    *p=9;//此时报错int *p; 
    p=new int;
    *p=9;//没错
    *p=10;//没错
    delete p;
    *p=9;//由于已释放,此时访问结果无法预料
      

  4.   

    汗。。我错了。。字符串指针可以定义的时候初始化
    char *p="dasd";
      

  5.   

    int *p=10;
    ————————
    也谈不上错吧!我觉得编译器应该可以通过(没试过)。只不过不会有人用一个指针指向一个常量的,这样做没什么意义,因为这样就表示用一个指针指向一个整型常量,而整型常量存储在静态存储区,是在整个程序运行期间始终有效的量(这一点上我认为分配的空间,所以和1L的朋友有意见不一致)。不过我理解楼主的意思,基本上指针的初始化也就是你所说的两种方式。要知道指针是用于指向变量的,对指针的操作我们是想做到间接寻址,如果你用指针指向常量,就没什么意思了,所以,这个应该这么写:
    定义指针的同时初始化:
    int a = 10;
    int *p = &a;
    先定义再初始化:
    int a = 10;
    int *p;
    p = &a;