c语言指针

1. 指针是一种数据类型  

    如:int * ,char * ,*单目运算符,表示指针上的变量;

2.取变量的地址用& 

    如int a = 1; int * p = &a  表示把指向a的内存地址赋给指针变量p;

3.指针变量可以做左值,也可以做右值

    如 int a = 1; 

        int * p = &a;

        int b = *p;  (右值)

        *p = 2;(左值)

4.数组指针(指向数组中第一个元素的常量指针)

   如 int k[] = {0,1,2,3}; (数组变量k本身表达地址)

    int * p = k;

    p = k[0]

    p = &k;

5.函数指针

  函数指针是指向函数的指针变量。

  typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型

  int max(int x, int y)
 {
    return x > y ? x : y;
  }

   /* p 是函数指针 */
   int (* p)(int, int) = & max; // &可以省略

   /* 与直接调用函数等价,d = max(max(a, b), c) */
    d = p(p(a, b), c);

6. 回调函数

   函数指针作为某个函数的参数

   函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

   简单讲:回调函数是由别人的函数执行时调用你实现的函数。

   
    #include <stdlib.h>  
    #include <stdio.h>
 
   // 回调函数
   void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
   {
      for (size_t i=0; i<arraySize; i++)
          array[i] = getNextValue();
    }
 
    // 获取随机值
   int getNextRandomValue(void)
   {
       return rand();
    }
 
int main(void)
{
    int myarray[10];

   /*getNextRandomValue 可理解为实参*/
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("\n");
    return 0;
}

 

posted @ 2020-03-12 09:39  头上一片天  阅读(234)  评论(0)    收藏  举报