l 高级语言中的变量有三个属性:变量的名字,变量的值,变量的地址。
数据类型决定了一个变量在内存中所占用的存储空间的大小以及允许执行的运算。
l 指针变量的两种运算符:
&:取地址运算符
*:指针内容运算符(间接访问运算符)
C语言中用NULL表示空指针。
1. “&”只能作用于变量,包括基本类型变量和数组的元素,结构体类型变量或者结构体的成员,不能作用于数组名,常量或者寄存器变量。
2. 单目运算符“*”是“&”的逆运算,他的操作数是对象的地址,“*”的结果是对象本身;单目“*”是通过变量的地址存取(或者引用)变量。
l 指针变量的声明和初始化
例:
先声明在初始化:
int a,* pa;
pa=&a;
或者声明的同时初始化:
int a,*pa=&a;
注意:不要将上面的表达式与一般的赋值语句混淆,也不要表示成:int a, *pa; *pa=&a;这是错误的。
l 指向函数的指针:
例:
#include <stdio.h>
max(int x,int y)
{
return (x>y)?x:y;
}
hello()
{
printf("Hello World!/n");
}
int main()
{
int (*pf)();/*函数指针定义*/
int a=1,b=2,c;
pf=max;/*将函数的入口地址赋给指针*/
c=(*pf)(a,b);/*用指针调用函数*/
printf("a=%d,b=%d/n",a,b);
pf=hello;/*将另外一个函数的入口地址赋给指针*/
(*pf)();/*用指针调用另外一个函数*/
}
注意:
1. 声明
类型标识符 (*指针变量名)();
*指针变量名外部必须用括号,因为()的优先级比*高,容易与返回指针的函数混淆。
2. 一个函数指针可以先后指向不同的函数,但是必须用函数的地址为函数赋值。如果有函数指针(*pf)(),则pr+n,pf++,pf—都等运算都是没有意义的。
l