初识C语言 —— 指针(二)

如果你发现特殊情况太多,那你肯定是用错方法了。    —— Carig Zerouni

👩指向指针的指针

一个指针变量可以指向整型变量、实型变量、字符类型变量,当然也可以指向指针类型变量。当这种指针变量用于指向指针类型变量时,则称之为指向指针的指针变量,一般定义如下:

类型标识符 **指针变量名

例如:

int **p;

其含义就是定义一个指针变量p,它指向另一个指针变量,该指针变量又指向一个基本整型变量。这里要提一句,指针运算符“ * ”是自右至左结合的,所以上述定义相当于:

int *(*p);

我们这里来看一个例题,用指向指针的指针变量输出12个月:

#include <stdio.h>

int main()
{
	int i = 0;
	char** p;
	char* month[] =
	{
		"January",
		"February",
		"March",
		"April",
		"May",
		"June",
		"July",
		"August",
		"September",
		"October",
		"November",
		"December"
	};
	for (i = 0; i < 12; i++)
	{
		p = month + i;
		printf("%s\n", *p);
	}
	return 0;
}

运行结果:
在这里插入图片描述

👨指针变量作为函数参数

通过前面的介绍,我们知道整型变量、实型变量、字符串变量、数组名等都可以作为函数参数。除此之外,指针型变量也可以作为函数参数。
我们下面来看一个交换两个变量值的例子:

#include <stdio.h>
void Swap(int *a, int *b)
{
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

int main()
{
	int x = 0;
	int y = 0;
	printf("请输入两个数字:  \n");
	scanf("%d %d", &x, &y);
	int* p1 = &x;
	int* p2 = &y;
	Swap(p1, p2);
	printf("x = %d  y = %d", x, y);
	return 0;
}

运行结果:
在这里插入图片描述
在上述代码中,Swap是我们自定义的函数,再main函数中调用该函数交换变量a和b的值,Swap函数的两个形参传入了两个地址值,即传入了两个指针变量。我们在Swap内部引入了中间变量tmp,将两个指针变量所指向的数值进行转换。这就是指针变量作为函数参数的使用方法。

🧑返回指针值的函数

指针变量也可以指向一个函数。函数在编译时会被分配一个入口地址,也就是函数的指针。我们可以用一个指针变量指向函数,然后通过该指针变量调用此函数。

一个函数可以带回一个整型值,字符值等等,也可以带回指针型的数据,也就是地址。返回指针值的函数简称为指针函数,定义指针函数一般形式如下:

类型名 *函数名(参数表列);

例如:

int *Mvp(int x, int y)

其中Mvp是函数名,调用它以后可以得到一个指向整型数据的指针。x和y就hi函数的形式参数了,均为基本整型。函数的函数名前有一个“ * ”,说明此函数是指针型函数。

👧指针数组作main函数的参数

我们在前面的程序几乎都会出现main函数。main函数被我们称为主函数,是运行所有程序的入口。main函数是由系统调用的,当处于操作命令状态下,输入main所在的文件名,系统即调用main函数,在前面的内容中,对main函数始终作为主调函数进行处理,也就是允许main调用其他函数并传递参数。
我们来看看main函数带参的形式:

main(int a, char* arr[])

从函数参数的形式上来看,包含一个整型和一个指针数组。

👦总结

指针这一部分我们介绍了指针的相关概念及其用法。我们首先要理解变量与指针之间的区别,重点掌握指点变量的相关概念及其用法。其中使用指针变量作为函数参数在编写程序过程中用的比较多,希望大家能够多多注意。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shark-s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值