指针数组和数组指针的理解与应用

指针数组

指针数组, 即以指针为元素的数组, 其主要应用于菜单的查找
注意下面的实例:

#include <stdio.h>    
int Menu();    
int main() {    
  int choice = Menu();    
  const char* string[] = {    
    "I love you!",    
    "I need you!",    
    "I like you!",    
    "I wait for you!",    
    "I can not live without you!"    
  };    
  if (choice > 0 && choice < 6) {    
    printf("%s\n", string[choice - 1]);    
  }                                                                                                                                     
  return 0;    
}    
int Menu() {    
  int choice = 0;    
  printf("誓言: 1 ~ 5\n");    
  printf("请选择:");    
  scanf("%d", &choice);    
  return choice;    
}    

效果图:
在这里插入图片描述
还有一个就是关于表驱动的实例:

#include <stdio.h>                                                                                                                      
int Add(int a, int b);
int Minus(int a, int b);
int Multiply(int a, int b);
int Divide(int a, int b);
int main() {
  int choice = 0;
  int result = 0;
  //函数指针类型
  typedef int(*T)(int, int);
  T menu[] = {
    Add,
    Minus,
    Multiply,
    Divide
  };
  printf("1.加法\n");
  printf("2.减法\n");
  printf("3.乘法\n");
  printf("4.除法\n");
  printf("请选择:");
  scanf("%d", &choice);
  if (choice > 0 && choice < 5) {
    result = menu[choice - 1](4, 2);
  }
  printf("%d\n", result);
  return 0;
}
int Add(int a, int b) {                             
  return a + b;                                     
}                                                   
int Minus(int a, int b) {                           
  return b - a;                                     
}                                                   
int Multiply(int a, int b) {                        
  return a * b;                                     
}                                                   
int Divide(int a, int b) {                          
  if (b != 0) {                                     
    return a / b;                                   
  }
 return 0;
}  

以上是指针数组的典型应用–>表驱动, 表驱动可以代替if else的选择叠加, 来降低程序的圈复杂度, 从而提高效率
以上还涉及到了一个有关函数指针的知识, 如果对函数指针的概念和应用理解不深入的可以参考下面链接, 希望能帮到你:
指针函数和函数指针

数组指针

数组指针, 即以数组为单位的指针, 其应用的范围不是很广, 其主要作为调用函数中二维数组的形参来使用, 注意下面例子:

#include <stdio.h>    
void Display(char(*arr)[256], int len);    
int main() {    
  char arr[][256] = {    
    "I love you!",    
    "I need you!",    
    "I like you!",    
    "I wait for you!",    
    "I can not live without you!"    
  };                                                                                                                                    
  Display(arr, 5);    
  return 0;    
}    
void Display(char(*arr)[256], int len) {    
  int i;    
  for(i = 0; i < len; ++i) {    
    printf("%s\n", arr[i]);    
  }    
}    

效果图
在这里插入图片描述
当然, 对于二维数组的形参形式, 也可以直接使用类似于arr[][256]这样的形式, 只不过很多时候我们会用指针的形式而非数组的形式来操作所谓的数组, 这是因为在某些情况下, 操作指针要比直接操作数组效率更高一些

希望本篇文章能对大家有所帮助, 欢迎大家的评论和建议

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值