指针和指针类型,变量类型和变量名

  • Post author:
  • Post category:其他

声明:本人正在研读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

    对函数指针所指对象(即函数)进行引用的方法和对其他类型的变量的值的引用方法不同,
如 char c = ‘a’ ;  char * p = &c ;当需要引用p所指向的对象的值时,方法为char d = *p ;而对于函数指针,应用方法为fp(),如上例所示。


版权声明:本文为xlsernt_sina_com原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。