指针理解

  1. 字符指针
  2. 数组指针
  3. 指针数组
  4. 函数指针
  5. 函数指针数组
  6. 指向函数指针数组的指针

字符指针
1.获得字符串变量的地址

int main()
{
	char  ch = 'a';
	char *p = &ch;
	return 0;
}

2.将一个字符串的首字符地址放到指针中

int main()
{
	char *ch = "hello world";
	printf("%s\n", ch);
	return 0;
}
//它的效果:调用这个字符指针可以获取里面的内容
但是他的存储是将字符串的首字符地址放入字符指针

数组指针

int (*p)[10]; //指向数组的指针(本质上还是一个指针)
这个指针指向的是一个数组
(可以理解成与字符指针不同是指向的类型不一样)

#include<stdio.h>
int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int (*p)[10] = &arr;
	return 0;
}

指针数组

int *p[10]; //与数组指针相类似
主要是因为[] 的优先级 高于 * 的优先级
p先与[]结合 成为一个数组 存放内容为 int *

函数指针

void (*test) () //与数组指针相类似
()的优先级比 *的优先级高

函数指针数组

一个数组,存放函数指针

int (*test[10])();
与指针数组类似
int test[10];
在他的基础上成为一个函数,由于
优先级低于()
所以在整体加括号
实战中,可以通过数组对函数实行调用

int add(int a, int b)
{
	return a + b;
}
int sub(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;
}
int main()
{
	int x, y;
	int input = 1;
	int ret = 0;
	int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
	while (input)
	{
		printf( "*************************\n" );
		printf( " 1:add 2:sub \n" );
		printf( " 3:mul 4:div \n" );
		printf( "*************************\n" );
		printf( "请选择:" );
		scanf( "%d", &input);
		if ((input <= 4 && input >= 1))
		{
			printf( "输入操作数:" );
			scanf( "%d %d", &x, &y);
			ret = (*p[input])(x, y);
		}
		else
			printf( "输入有误\n" );
		printf( "ret = %d\n", ret);
	}
	return 0;
}

指向函数指针数组的指针

指向 函数指针数组 的指针
函数指针数组 void (*test[10]) ();
数组指针 int (test)[10]
指向函数指针数组的指针 void (
(*test[10]))()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值