1.
1 #include<stdio.h>
2
3 int main(void)
4 {
5 int arr1[5] = {1,2,3,4,5};
6 int arr2[4][5] = {{1,2,3,0,5},{4,7,8,9,10}};
7
8 int (*pArr)[5] = &arr1;
9 pArr++;
10
11 int *p = (int*)pArr;
12 printf("*p %d\n",*--p);
13
14 pArr = arr2;
15 pArr++;
16 printf("*p %d\n",*(*pArr++ +2));
17
18 int (*pArr2)[5] = NULL;
19 pArr2 = pArr;
20 printf("*p %d\n",pArr2[-2][2]);
21
22 return 0;
23 }
~
2.
#include<stdio.h>
int main(void)
{
int arr1[5] = {1,2,3,4,5};
int arr2[5] = {6,7,8,9,10};
int arr3[5] = {11,12,13,14,15};
int arr4[5] = {16,17,18,19,20};
int* arr_1[2] = {arr1,arr2};
int* arr_2[2] = {arr3,arr4};
int** arr[2] = {arr_1,arr_2};
/*
要求:通过对arr的指针偏移打印1,7,13,20
*/
printf("%d\n",***arr);
printf("%d\n",*(*(*arr+1)+1));
printf("%d\n",*(**(arr+1)+2));
printf("%d\n",*(*(*(arr+1)+1)+4));
return 0;
}
3.指针函数:返回值是一个指针
1 #include<stdio.h>
2
3 /*
4 指针函数
5 */
6 int num = 6;
7 int *func(void);
8 int main(void)
9 {
10 int *p = NULL,a = 10;
11 p = &a;
12 printf("%d\n",*p);
13
14 p = func();
15 printf("*p:%d *func():%d\n",*p,*func());
16 return 0;
17 }
18
19 int *func(void)
20 {
21 int *q = #;
22 return q;
23
24 }
~
4.函数指针
1 #include<stdio.h>
2
3
4 int max(int a,int b)
5 {
6
7 return (a>b?a:b);
8 }
9
10 int main(void)
11 {
12
13 int (*pMax)(int ,int) = max;
14 int a =2,b = 3, c = 0;
15 c = (*pMax)(a,b);//等同于c = max(a,b);
16 printf("a:%d,b:%d,c:%d\n",a,b,c);
17
18 return 0;
19 }
20
5.
include<stdio.h>
#define CLEAR while(getchar() != '\n');
int add(int a,int b);
int min(int a,int b);
int mul(int a,int b);
int div(int a,int b);
int main(void)
{
int (*operation[4])(int,int) = {add,min,mul,div};//函数指针数组声明和初始化
int a =0,b = 0 ,res = 0;
char ch = 0;
while(1){
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
CLEAR;
printf("请输入运算符:");
ch = getchar();
CLEAR;
switch(ch){
case '+':
res = (*operation[0])(a,b);
printf("%d + %d = %d\n",a,b,res);
break;
case '-':
res = (*operation[1])(a,b);
printf("%d - %d = %d\n",a,b,res);
break;
case '*':
res = (*operation[2])(a,b);
printf("%d * %d = %d\n",a,b,res);
break;
case '/':
res = (*operation[3])(a,b);
printf("%d / %d = %d\n",a,b,res);
break;
default:
printf("404ERROR!\n");
break;
}
}
return 0;
}
int add(int a,int b)
{
return a + b;
}
int min(int a,int b)
{
return a - b;
}
int mul(int a,int b)
{
return a * b;
}
int div(int a,int b)
{
return a / b;
}