1、字符指针
形如
char arr1[] = "abcd";
char arr2[] = "abcd";
char* p1 = arr1;
char* p2 = arr2;
p1,p2称为字符指针,它指向字符串"abcd";
不同的是,arr1和arr2的地址不同,而p1的地址和p2的地址相同。
这是因为arr1 和arr 2 是两个不同的数组,虽然内容相同,但是地址不相同相互独立。而指针只是指向arr1或arr2首元素的地址,所以p1和p2的地址相同。
2、指针数组
指针数组就是数组元素为一级指针变量的数组。其定义形式如下:
int* p[3];——>一个存放三个指针变量的数组,变量的类型是int型
char* p[5];——>一个存放五个指针变量的数组,变量的类型是char型
下面给出一个实例:
int main()
{
int arr1[5] = { 1,2,3,4,5 };
int arr2[5] = { 2,3,4,5,6 };
int arr3[5] = { 3,4,5,6,7 };
int* parr[3] = { arr1,arr2,arr3 };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("%d", *(parr[i] + j));
}
printf("\n");
}
return 0;
}
3、数组指针
数组指针就是指向数组的指针;其本质上是指针
int(*parr)[10]——>表示一个指针,该指针指向一个数组,该数组有是个元素,每个元素都是int型变量;
如以下代码
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*p)[10] = &arr;
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d\n", *(*p+i));
}
return 0;
}
其运行结果为:
4、函数指针
在C语言中允许一个韩式的返回值是指针,这种返回值指针值的函数称为指针型函数,也称为函数指针。
下面直接给出函数指针的实例
#include <stdio.h>
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int (*pa)(int, int) = Add;
printf("%d\n", (*pa)(3, 2));
return 0;
}
运行结果为:
这里pa就是函数指针,它指向一个Add函数,(int,int)表示该函数的参数类型。(*pa)表示对函数指针进行解引用,后面再附上参数,即可调用Add函数。
可以用函数指针模拟实现计算器:
#include<stdio.h>
void menu()
{
printf("*************************\n");
printf("** 1.add 2. sub**\n");
printf("** 3.mul 4. div**\n");
printf("** 0. exit **\n");
printf("*************************\n");
}
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
int main()
{
int input = 0;
int x = 0;
int y = 0;
int (*parr[5])(int, int) = { 0,add,sub,mul,div };
do
{
menu();
printf("请选择:>");
scanf_s("%d", &input);
if (input >= 1 & input <= 4)
{
printf("请输入两个操作数:>");
scanf_s("%d %d", &x, &y);
int ret = parr[input](x, y);
printf("%d\n", ret);
}
else if (input == 0)
printf("退出");
else
printf("选择错误");
/*switch (input)
{
case 1:
printf("%d\n", add(x, y));
break;
case 2:
printf("%d\n", sub(x, y));
break;
case 3:
printf("%d\n", mul(x, y));
break;
case 4:
printf("%d\n", div(x, y));
break;
case 0:
printf("退出");
break;
default:
printf("选择错误");
}*/
} while (input);
return 0;
}
5、二级指针
二级指针就是一个指向指针变量的指针,其定义方式如下:
int** c;
char** a;
下面给出图解:
**c为二级指针