指针数组, 即以指针为元素的数组, 其主要应用于菜单的查找
注意下面的实例:
#include
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
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
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]这样的形式, 只不过很多时候我们会用指针的形式而非数组的形式来操作所谓的数组, 这是因为在某些情况下, 操作指针要比直接操作数组效率更高一些
希望本篇文章能对大家有所帮助, 欢迎大家的评论和建议