void*、 指针数组、数组指针、指针函数、函数指针

来源:互联网 发布:2017网络暴力的例子 编辑:程序博客网 时间:2024/06/08 08:03
总是遇到这几个坑点void*、 指针数组、数组指针、指针函数、函数指针,下面来一一解释。


  void * ----无类型指针,它是个指针,一个没有类型的指针,可以指向任何类型指针数据。比较常见的形式是出现在函数中进行传参,


下面的举个例子来说明这个void *,有这个一个函数int add (void *a,void *b)实现的功能是将传过来的地址的内容相加(地址存放的内容相加);


  1. int add1 (void *a,void *b){
  2. /*
  3. (int*)由于add1的函数列表中定义的是void* 任何类型的指针,但是在main函数传进来的指针是int *类型的,所以这裡要进行强制转换。
  4. */
  5. int sum = *((int*)a )+*((int*)b);  ////强制转换


  6. return sum;
  7. }


  8. float add2 (void *a,void *b){
  9. float sum = *((float*)a )+*((float*)b);  //强制转换
  10. return sum;
  11. }




  12. int main(){
  13. int num1 = 3;
  14. int num2 = 5;
  15. float num3 = 6.5;
  16. float num4 = 7.5;
  17. int i;
  18. float j;


  19. i = add1(&num1,&num2);  //传入int* 指针
  20. j = add2(&num3,&num4); //传入float* 指针


  21. printf("int sum = %d\n",i);
  22. printf("float sum = %f\n", j);
  23. system("pause");
  24. return 0;
  25. }
  26. /*********运行结果**********/
  27. int sum = 8
  28. float sum = 14.000000


  29. /**************************/
  30. 指针数组------首先看到的是数组在后面,因此指针数组是一个数组,裡面的元素是什麽呢?元素是指针!!!
  31. 定义形式为:"类型名 *数组标识符[数组长度]" 
  32. 为了更容易理解举一个例子,将4个地址放进数组,然后将地址的内容打印输出
  33. int main(){
  34. int num1 = 5;
  35. int num2 = 9;
  36. int num3 = 6;
  37. int num4 = 10;
  38. int i;


  39. int *str[4] = {&num1,&num2,&num3,&num4}; //传入4个地址,元素是地址;


  40. for(i = 0;i<=3; i++){
  41. printf("num[%d] = %d\n",i,*str[i]); //打印输出
  42. }


  43. system("pause");
  44. return 0;
  45. }
/********运行结果*********/


num[0] = 5
num[1] = 9
num[2] = 6
num[3] = 10
/************************/


数组指针------它是一个指针,在以为数组中仅表示指向数组中的某个元素,可以用于二维数组中,表示行数,因此在二维数组中也被称为行指针。

定义 int (*p)[n];

数组指针在一维数组中的意义---元素指針,指向某個元素:

int a[3] = [4,5,6];

int(*p)[2];//定义一个指针,指向某个数组的第3个元素。

p = a;//将一维数组的地址赋值给数组指针p

结果p[2] = 6; 


数组指针在二维数组中的意义---行指針:
int a[2][4];
int (*p)[4]; //定义一个数组指针,指向含4个元素的一维数组。
 p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
 p++;       //p=p+1;p+1跨过行4個元素,从a[0][]指向了行a[1][]




指针函数------返回值为指针的函数,当在定义一个函数的时候,可以定义为返回值为void 函数,可以定义为返回值为int函数,也可以定义为返回值作为float函数 ,也存在著返回值为int *函数。其实一眼就看出来了。
void  fun( );//返回值为void函数
int  fun( );//返回值为int函数
float  fun( );//返回值为float函数
int * fun( ) ; //返回值为int* 函数,也就是指针函数,当然也可以float* 指针函数


函数指针------顾名思义,函数指针的意思是,函数指针,它是一个指针。既然是函数的指针,无非就是用来指向一个函数的了,常见的用法是函数指针作为一个函数的列表参数传递,使得这个函数(调用者)可以调用另一个函数(被调用者,被调用者称为回调函数)。
int (*funame)(int a)

0 0
原创粉丝点击