现在的位置: 首页 > 综合 > 正文

C语言指针回顾

2018年05月28日 ⁄ 综合 ⁄ 共 1798字 ⁄ 字号 评论关闭

 

C语言中指针是一个较为复杂而又重要的概念,有关指针的定义类型和操作也比较多,最近回顾了谭浩强出版的《C程序设计(第二版)》,作个小结如下:

int *p;  p为指向整型数据的指针变量

 

int (*p)[n];  表示p是一个指针变量,它指向包含4个整型元素的一维数组;

可以对下面二者做比较:

(1) int a[4];         表示a有4个元素,每个元素为整型

(2) int (*p)[4];     表示*p有4个元素,每个元素为整型

上述二者区别在于a是一个指针常量,p 是一个指针变量,且只能指向一个包含4个元素的一维数组。

 

int *p[n];  表示定义指针数组p,它由n个指向整型数据的指针元素组成

用法:char *name[]={"Follow me","BASIC","Great Wall"};

          printf("%s\n",name[i]);

          name[i]中存放的是各字符串的首地址,而指针数组名name是该指针数组的首地址

 

int (*p)();  p为指向函数的指针变量,该函数返回一个整型值

用法:int max(int x,int y) {....}

          int min(int x,int y) {.....}

          int process(int x,int y,int(*fun)(int,int))

                  {

                      int result;

                      result=(*fun)(x,y);

                      return(result);

                  }

          ...

          max_value=process(3,6,max);

          min_value =process(9,24,min);

将函数的入口地址(即函数名)作实参传递给process函数中的形参fun(fun是指向函数的指针变量,*fun是一个整型函数,有两个整型形参),可实现每次调用process函数完成不同的功能。

 

int *p();  表示p为一个返回指针值的函数,且该指针指向整型数据

用法:float *search(float *pointer,int n)

                  {

                       float *pt;

                       pt=pointer+n;

                       return(pt);

                  }

 

int * *p;  指针的指针:p是一个指针变量,它指向一个指向整型数据的指针变量

用法:char *name[]={"Follow me","BASIC","Great Wall"};

          char **p;

          int i;

          for(i=0;i<3;i++)

             {

                  p=name+i;

                  printf("%s\n",*p);/*输出字符串时,需用各字符串的首地址*p,不用**p*/

             }

 

除上述几种定义和用法以为,ANSI新标准增加了一种“void”指针类型,即可定义一个指针变量,但不指定它是指向哪一种类型数据

用法:char *p1;

          void *p2;

          ......

          p1=(char *)p2; /*需对void指针进行强制类型转换*/

          p2=(void *)p1; /*同样进行强制类型转换*/

          ......

          void *fun(char c1,char c2) {...}  /*表示函数fun返回的是一个指针,它指向空类型*/

          p1=(char *)fun(c1,c2); /*同样进行强制类型转换*/

 

总结:指针使用非常灵活,可以利用它编写出颇有特色、质量优良的程序,实现许多用其他高级语言难以实现的功能,但也十分容易出错,而且这种错误难以发现,比如由于未对指针变量p赋值就向*p赋值,就有可能破坏有用的单元的内容,因此,使用指针要非常注意,积累经验。

抱歉!评论已关闭.