*P
这种格式其实就是取一个地址中的数据,这里的P是一个地址,通常,我们可以把计算机内存比成是一幢大厦,里面有很多的房间,所以我们得把所有的房间都编一个号,这样就方便查找了,而计算机也是这样,为了方便在内存中取得数据,因此我们把内存也给编上号,而这个号就是指针.一个指针指向一个变量的首地址.这样说你应该明白了吧?
比如:
char p;
其实这里编译器就会对变量p分配一个内存空间,假设p分配到的地址是内存中的第2000位内存空间,那么2000就是变量p的指针,指向变量p,我们可以用&p来取得变量p的指针.下面我们再定义一个变量
char *pp;
这里的pp就是一个指针变量,用于存放指针,我们结合上面叙述,来看
pp=&p;
这样我们就把变量p的指针赋给了指针变量pp,也就是说,我们把指针变量pp指向了变量p的首地址了,所以,此时我们不但可以通过变量p来读写数据,也可以通过指针变量pp来读写变量p里的数据了.
main()
{
char a,b;
char p;//定义普通变量
char *pp;//定义指针变量
pp=&p;//将普通变量与指针变量联系起来
p=127;
a=p;//将变量p里的数据赋给变量a
b=*pp;//将指针pp指向的地址中的数据赋给变量b;
printf("a=%d
b=%d\n",a,b);
return 0;
}
这里我们应该看到a,b的值是一样的.
楼主可以这么认为:
&号取地址,表示取一个变量对应的首地址,因此后面跟的变量应该是普通变量.
*号取数据,表示取一个指针指向的地址中的数据,因此后面跟的变量应该是一个指针变量.
另外补充一下,对于数组来说,如果没有下标或下标不全,那他本身就是一个指针,因此就不能再用&号取地址了!
如:
char *p;
char a[5];
p=a;//这里不能写成p=&a;
说完了,如果有错请高手指正
[[it] 本帖最后由 wqstar028 于 2008-12-1 14:04 编辑 [/it]]