C语言,指针修饰数组,函数
1. 指针修饰数组
1. 指针数组
int *p1[3];

#include <stdio.h>
int main(void)
{
int a = 1, b = 2, c = 3;
int *p1[3] = {&a, &b, &c};
int len = sizeof(p1) / sizeof(p1[1]);
for (i = 0; i < len; ++i)
{
printf("%d\n", *p1[i]);
}
system("pause");
return 0;
}
结果: 
对字符串数组更有用
#include <stdio.h>
int main(void)
{
char *p1[3] = {"you","love","me"};
int i;
int len = sizeof(p1) / sizeof(p1[1]);
for (i = 0; i < len; ++i)
{
printf("%s\n", p1[i]);
}
system("pause");
return 0;
}
结果: 
2. 数组指针
int (*p2)[5];

-
结论: 数组指针是一个指针,它指向的是一个数组 -
例1: 普通指针
数组temp可以表示数组名,数组地址,数组第一个元素的地址。
#include <stdio.h>
int main(void)
{
int temp[3] = {1, 2, 3};
int *p1 = temp;
int i;
int len = sizeof(temp) / sizeof(temp[1]);
for (i = 0; i < len; ++i)
{
printf("%d\n",*(p1 + i));
}
system("pause");
return 0;
}
结果: 
#include <stdio.h>
int main(void)
{
int temp[3] = {1, 2, 3};
int (*p2)[3] = &temp;
int i;
int len = sizeof(temp) / sizeof(temp[1]);
for (i = 0; i < len; ++i)
{
printf("%d\n",*(*p2 + i));
}
system("pause");
return 0;
}
结果: 
原理图: 
2. 指针修饰函数
1. 指针函数
- 定义:
使用指针变量作为函数的返回值,就是指针函数。 - 语法:
int *p();
#include <stdio.h>
char *getWord(char c)
{
switch(c)
{
case 'A': return "Apple";
case 'B': return "banana";
default: return "none";
}
}
int main(void)
{
char input;
scanf_s("%c",&input, 2);
printf("%s\n", getWord(input));
system("pause");
return 0;
}
结果: 
2. 函数指针
用于调用函数。
例1:
#include <stdio.h>
int square(int num) {
return num * num;
}
int main(void)
{
int num;
scanf_s("%d", &num, 1);
int (*fp)(int);
fp = □
printf("%d * %d = %d\n", num, num, (*fp)(num));
system("pause");
return 0;
}
结果: 
#include <stdio.h>
int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);
int add(int num1, int num2)
{
return num1 + num2;
}
int sub(int num1, int num2)
{
return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2)
{
return (*fp)(num1, num2);
}
int main()
{
int num1, num2;
scanf_s("%d%d",&num1, &num2, 2);
printf("%d + %d = %d\n", num1, num2, calc(&add, num1, num2));
printf("%d - %d = %d\n", num1, num2, calc(&sub, num1, num2));
system("pause");
return 0;
}
结果: 
#include <stdio.h>
int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);
int (*select(char))(int, int);
int add(int num1, int num2)
{
return num1 + num2;
}
int sub(int num1, int num2)
{
return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2)
{
return (*fp)(num1, num2);
}
int (*select(char op))(int, int)
{
switch(op)
{
case '+': return add;
case '-': return sub;
}
}
int main()
{
int num1, num2;
char op;
int (*fp)(int, int);
printf("请输入一个式子(如1+3)");
scanf_s("%d", &num1, 1);
scanf_s("%c", &op, 1);
scanf_s("%d", &num2, 1);
fp = select(op);
printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
system("pause");
return 0;
}
结果: 
|