C语言指针操作(八)返回指针值的函数详解

这篇具有很好参考价值的文章主要介绍了C语言指针操作(八)返回指针值的函数详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。其概念与以前类似,只是返回的值的类型是指针类型而已。

目录

一、引入

二、返回指针值的函数的定义

2.1举例说明1

2.2举例说明2


一、引入

一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。其概念与以前类似,只是返回的值的类型是指针类型而已。

例如 “ int *a(int x,int y); ”,a 是函数名,调用它以后能得到一个 int* 型(指向整型数据)的指针,即整型数据的地址。x 和 y 是函数 a 的形参,为整型。

请注意在 “ *a ”两侧没有括号,在 a 的两侧分别为 * 运算符和 () 运算符。而 () 优先级高于 * ,因此 a 先与 () 结合,显然这是函数形式。这个函数前面有一个 *,表示此函数是指针型函数(函数值是指针)。最前面的 int 表示返回的指针指向整型变量。

二、返回指针值的函数的定义

定义返回指针值的函数的原型的一般形式为:

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

对初学C语言的人来说,这种定义形式可能不大习惯,容易弄错,使用时要十分小心。通过下面的例子可以初步了解怎样使用返回指针的函数。

2.1举例说明1

举例:有 a 个学生,每个学生有 b 门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩,用指针函数来实现。

#include <stdio.h>
int main()
{
	float score[][4] = { {60, 70, 80, 90}, { 56,89 ,67,88 }, { 34,78,90,66 } };
	float* search(float(*pointer)[4], int n);		//函数声明
	float* p;
	int k;
	printf("输入要找的学生的序号:");
	scanf_s("%d", &k);
	printf("The scores of No.%d are:\n", k);
	p = search(score, k);					//调用search函数,返回score[k][0]的地址
	for (int i = 0; i < 4; i++)
		printf("%5.2f\t", *(p + i));		//输出score[k][0]-score[k][3]的值
	printf("\n");
	return 0;
}

float* search(float(*pointer)[4], int n)	//形参pointer是指向一维数组的指针变量
{
	float* pt;
	pt = *(pointer + n);					//pt的值是&score[k][0]
	return pt;
}

运行结果:

函数返回指针,C语言,c++,c语言,算法,数据结构,指针

程序分析:

函数返回指针,C语言,c++,c语言,算法,数据结构,指针

函数 search 定义为指针型函数,它的形参 pointer 是指向包含 4 个元素的一维数组的指针变量。 pointer+1 指向 score 数组序号为 1 的行(学生序号是从0号算起的)。*(pointer+1)指向 1 行 0 列元素(对 pointer+1 加了 “ * ” 号后,指针从行控制转化为列控制了)。search 函数中的 pt 是指针变量,它指向 float 型变量(而不是指向一维数组)。main 函数调用 search 函数,将 score 数组首行地址传给形参 pointer (注意 score 也是指向行的指针,而不是指向列元素的指针)。k 是要查找的学生序号。调用 search 函数后,main 函数得到一个地址 &score[k][0] (指向第 k 个学生第 0 门课程),赋给 p。然后将此学生的 4 门课程的成绩输出。注意 p 是指向 float 型数据的指针变量,*(p+i) 表示该学生第 i 门课程的成绩。

2.2举例说明2

举例:对2.1中的程序,找出其中有不及格的课程的学生及其学生号。

#include <stdio.h>
int main()
{
	float score[][4] = { {60,70,80,90},{56,89,67,88},{34,78,90,66} };
	float* search(float(*pointer)[4]);		//函数声明
	float* p;
	for (int i = 0; i < 3; i++)				//循环3次
	{
		p = search(score + i);	//调用search函数,如有不及格返回score[i][0]的地址,否则返回NULL
		if (p == *(score + i))	//如果返回的是score[i][0]的地址,表示p的值不是NULL
		{
			printf("No.%d score:", i);
			for (int j = 0; j < 4; j++)
			{
				printf("%5.2f ", *(p + j));	// 输出score[i][0]score[i][3]的值
			}
			printf("\n");
		}
	}
	return 0;
}

float* search(float(*pointer)[4])	//定义函数,形参pointer是指向一维数组的指针变量
{
	float* pt = NULL;				//先使pt的值为NULL
	for (int i = 0; i < 4; i++)
	{
		if (*(*pointer + i) < 60)
			pt = *pointer;			//如果有不及格课程,使pt指向scoreL[i][0]
	}
	return pt;
}

运行结果:

函数返回指针,C语言,c++,c语言,算法,数据结构,指针

程序分析:

函数 search 的作用是检查一个学生有无不及格的课程。在 search 函数中的 pointer 是指向一维数组(有 4 个元素)的指针变量。pt 为指向 float 型变量的指针变量。从实参传给形参 pointer 的是 score+i,它是 score 第 i 行的首地址,在 search 函数中,先使 pt=NULL (即 pt=0 )。用 pt 作为区分有无不及格课程的标志。若经检查 4 门课中有不及格的,就使 pt 指向本行 0 列元素,即 pt=&score[i][0];若无不及格则保持 pt 的值为NULL。将 pt 返回 main 函数。在 main 函数中,把调用 search 得到的函数值(指针变量 pt 的值)赋给 p。用 if 语句判断 p 是否等于 *(score+i),若相等,表示所查的序号为 i 的学生有不及格课程( p的值为 *( score+i ),即 p 指向 i 行 0 列元素),就输出该学生(有不及格课程的学生) 4 门课成绩。若无不及格,p的值是NULL,不输出。

C语言指针操作系列文章:

C语言指针操作(一)地址,指针,指针变量是什么

C语言指针操作(二)指针变量作为函数参数

C语言指针操作(三)通过指针引用数组

C语言指针操作(四)用数组名作函数参数

C语言指针操作(五)通过指针引用多维数组

C语言指针操作(六)通过指针引用字符串

C语言指针操作(七)指向函数的指针

C语言指针操作(八)返回指针值的函数

C语言指针操作(九)指针数组和多重指针

C语言指针操作(十)动态内存分配与指向它的指针变量

C语言指针操作(十一)有关指针的小结文章来源地址https://www.toymoban.com/news/detail-721886.html

到了这里,关于C语言指针操作(八)返回指针值的函数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言指针操作(二)指针变量作为函数参数

    指针变量作为函数参数详解,形参和实参之间的值传递如何传递?如何改变指针变量所指向的变量? 函数的参数不仅可以是整型,浮点型,字符型等数据,还可以是指针类型;它的作用是将一个变量的地址传送到另一个函数中。 关于地址,指针,指针变量可以参考一下这篇

    2024年02月04日
    浏览(40)
  • C语言--指针详解(下)--字符指针、数组指针、指针数组、函数指针、函数指针数组(转移表)

    在C语言中有一种指针类型为字符指针 char*,常用其来表示字符,使用如下: 除了上述用法之外,还可以有以下的用法: 在上面的代码中,字符 \\\" hello word \\\"是常量字符串,将\\\"hello word\\\"放入 pstr 指针的实质是将第一个字符 “ h \\\" 的地址传递给了 pstr ,通过首字符 ” h \\\" 就可以访问

    2024年02月03日
    浏览(36)
  • C语言 函数指针详解

    1.1、概念 函数指针 :首先 它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址 ; 示例: 函数名是等于函数地址 的! 1.2、函数指针的使用方法 函数指针的定义 : 函数的返回值类型(*指针名)(函数的参数列表类型 ) 1.3、怎么使用函数指针去调用函

    2024年02月14日
    浏览(32)
  • 如何实现让一个函数能返回多个值的效果

    在C语言中,一个函数通常只能返回一个值。但是可以通过指针参数或结构体来模拟返回多个值的效果。 使用指针参数 :你可以将需要返回的值作为函数的参数,通过指针的形式传入,让函数将结果写入指针所指向的内存位置。 使用结构体 :你可以定义一个结构体,其中包

    2024年02月08日
    浏览(48)
  • C++中几种处理函数返回值的方式

    函数可以返回一个具体的值,例如整数、浮点数、结构体、类对象等。返回值被复制到函数调用点,在调用点可以直接使用或赋给其他变量。 函数可以返回一个引用,引用是对某个变量的别名。通过引用返回可以避免复制大型对象的开销,并允许修改原始对象。需要注意的是

    2024年02月10日
    浏览(30)
  • 【C语言进阶】⑥函数指针详解

    1.概念 函数指针 :首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址; 请看示例: 解析:parr是一个指向数组的指针,存放的是数组的地址; 所以: 数组指针 —存放数组地址的指针; 数组名 —得到的就是数组的地址; 那么我们可以不可以这么认

    2024年02月02日
    浏览(30)
  • getchar函数详解看这一篇就够了-C语言(函数功能、使用、返回值)

    首先要明确getchar的功能是:从计算机终端(一般是键盘)输入一个字符,其值就是输入得到的字符。 目录 getchar函数简介 getchar函数执行过程详解(配图)  getchar用法示例 解释一下:while ((ch=getchar()) != \\\'EOF\\\') 函数原型:int getchar(void);                                 返回

    2024年02月07日
    浏览(47)
  • C++ 返回函数指针的函数

    目录 0 前言 1 Function Pointer in C/C++ type 1.1 ordinary function Pointer 1.2 non-static member function of class 1.3 Lambda To Function Pointer 1.4 总结什么是指针 2 Returning a function pointer from a function in C/C++ 3. C - Variable Arguments (Variable length arguments) 4. Variadic Template 5 Variadic Template with member function pointer 6 最终

    2024年02月05日
    浏览(32)
  • 【算法与数据结构】 C语言实现单链表队列详解

    前面我们学习了队列的顺序表的实现,本节将用单链表实现队列。 队列也可以数组和链表的结构实现, 使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低 。下面我们先复习一下队列的基本概念: 队列:只允许在一端进行插入

    2024年04月11日
    浏览(42)
  • 数据结构:定长顺序串(SString)基本操作的算法描述(C语言)

    作者在学习数据结构时,发现鲜有完全按照 C 语言描述的算法操作,这让习惯于写 .c 而不是 .cpp 的初学者很是头疼。本文将基于 C 语言描述算法操作,如有错漏还望大佬们指正。 本文将按照严惠敏所著《数据结构(C语言版)》所做的函数原型声明进行算法描述,由于C语言不支

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包