int a;
//a=20;
int * pa=&a;
a=20;
printf("%d",*pa);
VS 2010,如果在定义一个整形变量后,马上赋值(就是第二行),第三行定义指针就报错,提示少分号,但如果用第四行,就是先定义指针,再赋值 ,就不会错,请教原因?
C语言里面的指针和数组是很有趣的。
例如定义数组a[10],你可以通过a[1]访问里面的元素,也可以通过*(a+1),来访问。
为什么这里可以这样用呢?
ptr的类型为(int *),所以ptr在内存里面存放的就是int类型的指针,指向了某个int地址。正常情况下,你可以通过ptr访问它指向的某一个地址里面的数据,如下图可以看到22。
你这里的程序里面有一个malloc函数,它的功能就是申请空间,本来只有一个空间的,申请之后就可以有很多连续的空间了。这个时候如果ptr里面的值0000001加上1就指向了22下方的空间了,可以继续存东西了,如图所示。
这就是指针有趣的地方所在,它可以直接控制地址空间。ptr[i]的意思就是 就和*(ptr+i)一样。
所以scanf的时候可以直接往ptr[i]这个地址放东西。
类似的,char *p也可以变成数组,只要你给了他空间。这个在数据结构和算法里面用得很多,也很有意思,不过容易把自己绕晕。
这个差不多就是全部代码了
#include
#include
int main(int argc,char * argv[]) {
int a;
//a=20; 有这行,下面的就报错
int * pa=&a;
a=20;
printf("%d",*pa);
return 0;
}
我用的VC 没发现报错 你把编译的clean一次 重新build看看
参考资料:VC
追问VS2010,还是不行
追答报错也贴上来看看吧,code 没问题
追问好像就是三楼说的原因,不过编译器不同,可能不报错.我用Eclipse+gcc就没报错.