声明:本人正在研读UNIX环境高级编程,相关博文为学习心得,观点可能会有错误,若那位大神发现错误,请留言指正,不胜感激。
指针变量与一般变量
C语言中,变量由两个特征描述,变量类型和变量名。变量类型决定了此变量在内存中所占空间大小,及字节数。如char占用1个字节,int占用4个字节。变量名是面向程序设计者而言的,当程序编译后,变量名被编译成为32bits的内存地址(此处已32位系统为例)。
个人理解,指针也是一种变量,也拥有变量的特征:变量类型和变量名,不过对于指针,其称呼为指针(变量)和指针类型。如char * p ;此处p是一个指针变量,其变量名为p,其类型为char * 字符指针类型。
指针的常见类型有两类:基本数据类型指针类型和指针指针类型(对于二级指针而言)。下例解释了二级指针中各个变量的类型。
如char ** p ;此处,有3个变量,p为一个拥有char型指针指针类型的变量;*p为char型指针类型;**p为char型。
函数与函数类型
C语言中,函数也是有类型的,这里所说的函数类型不是函数的返回值类型,而是函数本身。函数本身的类型由两个特征来描述,函数的返回值和函数的参数列表。如int func(char * p) ;此函数类型由其返回值类型int和参数列表—-参数个数和各个参数的类型来共同描述。
在C语言中,函数类型通常使用函数指针类型来定义。如typedef int(*p)(char *p) ;此类中,定义了一个函数指针类型p,可以使用这一类型定义函数指针。如下例所示。
#include <stdio.h>
typedef int (*p)(char * p) ;
int f1(char * p1)
{
printf(“call f1\n”) ;
}
int f2(char * p2)
{
printf(“call f2\n”) ;
}
void main(int argc , char * argv[])
{
p fp = NULL ;
if(atoi(argv[1] == 1))
fp = f1 ;
if(atoi(argv[1] == 2))
fp = f2;
fp() ;
}
在linxu命令行中输入:./a 1
输出:call f1
在linux命令行中输入:./a 2
输出:call f2