指针的赋值有关问题

指针的赋值问题#includestdio.h#includeiostream.hvoidinc(int*&i){i++}intmain(){intb7int*i&bc

指针的赋值问题
#include   <stdio.h>
#include   <iostream.h>

void   inc(int   *&   i)
{
i++;
}


int   main()
{
int   b   =   7;
int*   i   =   &b;
cout   < <   *i   < <   endl;
*i   =   1;
cout   < <   "i   =   "   < <   i   < <   endl;
cout   < <   *i   < <   endl;
inc(i);
cout   < <   "i   =   "   < <   i   < <   endl;
return   0;
}
这段代码编译能够通过,并且运行结果和预想的也一样,开始*i输出为7,后来变为1;但是下面这段代码就不一样了。
#include   <stdio.h>
#include   <iostream.h>

void   inc(int   *&   i)
{
i++;
}


int   main()
{
int*   i   =   0;
*i   =   1;
cout   < <   "i   =   "   < <   i   < <   endl;
cout   < <   *i   < <   endl;
inc(i);
cout   < <   "i   =   "   < <   i   < <   endl;
return   0;
}
这里编译仍能通过,但是运行时就出错,还没有输出任何东西(好像是*i不能赋值)。
不知道是为什么,求教各位大侠!

[解决办法]
int main()
{
int b;
int* i = &b;

//这样就行了,因为你定义int* i=0相当于i这个指针什么也不指向,那你下面再*i=1当然说不过去,因为你本来说它什么也不指向,又哪来的地方去赋值呢?


*i = 1;
cout < < "i = " < < i < < endl;
cout < < *i < < endl;
inc(i);
cout < < "i = " < < i < < endl;
return 0;
}

[解决办法]
编译系统对内存是有保护的,一个对象不仅是数据,还必须包含他具有的type, 你可以void *p =0x000001.但是如果你的指针包含type信息。相应的内存也必须包含对应的type.int *p = (int*) 0x000001