C语言_指针及回调函数练习
发布日期:2021-05-14 23:42:49 浏览次数:17 分类:精选文章

本文共 1983 字,大约阅读时间需要 6 分钟。

2021-04-12 函数高级

题1. 分辨各指针类型

在C语言中,指针的定义方式要根据其用途而定。以下是常见指针类型及其表示方式:

  • 单指针:用于单个内存地址的指针。

    int *p; // 单指针,指向int型数据。
  • 常数指针:指针指向常量,不可修改。

    int const *pci; //pci指向常量,无法赋值或修改。
    int *const p; //p不可赋值,但可以读取。
  • 二维数组指针:可以表示二维数组的地址。

    int (*p)[10]; // p是10个int型元素的二维数组指针。
  • 函数指针:用于存储函数地址。

    int (*pf)(void); // pf指向返回void的函数。
  • 函数指针数组:存储多个函数指针。

    int (*pfArr[10])(void); // pfArr包含10个函数指针。
  • 注意事项:正确书写时应先写目标类型,再写指针符号。如int *p而非*int p

    题2. 空指针概念

    在C语言中,void *类型用于空指针,表示指向0的虚拟内存地址。常见用法包括:

    • 静态空指针初始化:
      void *p = NULL; // 或 nullptr(C++特性)。
    • 勾画示例:
      int main(int argc, char **argv) {
      void *p; // 声明了空指针。
      p = nullptr; // 或 p = NULL。
      // 可用于替代其他指针类型转换。
      }

    示例分析:代码p=str;存在安全隐患,因为str是常量内存,不可随意指针化。

    题3. 常量指针与指针常数的运用

    常量指针(指向const数据,读取权限高):

    int const *pci = &a; // pci不可修改,或enkins不能ompilate。

    指针常数(指针本身不可修改,但可以指向任意地址):

    int *const p = &b; // p不可再赋值,但可以访问b的值。

    示例解析:代码中int const *pci = &a;正确,而int *const p = &b;同样有效。

    题4. 通用幂函数编写

    实现一个通用幂函数,实现数的正次幂和负次幂,可区分奇数次幂和偶次幂:

    float power(int num, int pow, float (*func)(int, int)) {
    return func(num, pow);
    }

    函数实现

    • 正次幂(pos_square):
      float pos_square(int a, int p) {
      if (p == 0) return 1;
      for (int i = 1; i < p; ++i) {
      a *= a;
      }
      return a;
      }
    • 负次幂(neg_square):
      float neg_square(int a, int p) {
      static float result = 1;
      static int power = p;
      // 根据幂数处理...
      }

    注意事项:幂函数需正确处理奇数和负幂数。

    题5. 通用显示函数

    实现一个通用函数,可显示多种类型的数据:

    void show(int* a, int size, void (*printer)(int*)) {
    for (int i = 0; i < size; ++i) {
    printer(a + i);
    }
    }

    具体实现函数

    • show_int:用于整数数组。
      void show_int(int* a, int size) {
      for (int i = 0; i < size; ++i) {
      printf("%d ", a[i]);
      }
      printf("\n");
      }
    • show_float:用于浮点数组。
      void show_float(float* a, int size) {
      for (int i = 0; i < size; ++i) {
      printf("%f ", a[i]);
      }
      printf("\n");
      }
    • show_char:用于字符数组。
      void show_char(char* a, int size) {
      for (int i = 0; i < size; ++i) {
      printf("%c ", a[i]);
      }
      printf("\n");
      }
    • show_str:用于字符串。
      void show_str(char* str, int size) {
      for (int i = 0; i < size; ++i) {
      printf("%c", str[i]);
      }
      printf("\n");
      }
    上一篇:练习_C指针与排序算法
    下一篇:C语言_动态内存分配练习

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月13日 19时16分43秒