指针:
相信大家对下面的代码不陌生:
int i=2;
int *p;
p=&i;
这是最简单的指针应用,也是最基本的用法。再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而是变量的地址。如上代码,指针p中保存的是整型变量i的地址信息。
接下来看如何定义一个指针,既然指针也是一个变量,那么它的定义也和其它变量一样定义:如:int *p;*是间接寻址或间接引用运算符。上例中我们还看到了一个特别的运算符&,它是一个取地址运算符(在其他合适场合&也是按位运算运算符,&&为取交集运算符)。
在上面的指针定义中,我们看到了定义的是一个整型指针,难道指针还有类型吗?答案是肯定的,指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某种特定的数据类型(唯一的例外:指向void类型的指针可以存放指向任何类型的指针,但它不能间接引用其自身。)。比如,int 类型的指针绝对不能指向char 类型的变量。
下面我们给出一个完整的例子来说明指针的简单应用:
#include<stdio.h>
void main()
{
int a,b,c,*p;
a=1;
b=3;
p=&a;
b=*p+1;
c=*(p+1);
printf("%d %d %d %d /n",a,b,c,*p+3);
}
运行结果为: 1 2 -858993460 4
这是个完整的例子,可以自己在机器上调试一下,现在很多人用的都是微软的Visual Studio 开发环境,有人就不知道在该开发环境中怎么写C程序以及调试C程序,具体境况可以参考附录。
在上面例子中,看到了这样两个表达式b=*p+1;和c=*(p+1);前者的意思是p所指的地址里的内容加1再赋给b,相当于b=a+1;,后者是p所指的地址加1再把(p+1)所指的地址赋给c,当然我们不知道p的下一个地址里放的是什么,所以输出了一个随机值(这样的操作时很危险的,切记不要使用不确定的内存地址)。