【自用】C语言初级入门9(下)

C语言的编译系统都是将形参数组名作为指针指针变量来处理的,即指针变量写成数组形式。例如,下面两个函数的首部是等同的:

void sort(int arr[],int n)
void sort(int *arr,int n)

C语言中,一个程序执行时它的每个函数都会占用内存中一段连续的区域,每个区域都有一个入口地址(起始地址),一个函数的函数名就代表了该函数的入口地址,即由函数名表示的是函数指针常量。函数指针的类型与该函数的返回值类型必须一致

定义一个指向函数的指针(简称函数指针)变量的一般形式为:

类型说明符   (*指针变量名)(形参类型表)

在定义指向函数的指针变量时,变量名外的括号不能缺少。

通过函数指针调用函数,调用的一般形式为:

(*函数指针变量名)(实参表列);   //第一种

函数指针变量名(实参表列);   //第二种

写一个简单的例子。

#include <stdio.h>
#include "stdlib.h"
int plus(int *, int);

int main() {
	int i, n, sum = 0, *p = 0, *q = 0;
	int (*p1)(int *, int); //定义返回值为整型的函数指针p1,参数为整型数组和数组的长度
	printf("输入整型数组长度:");
	scanf("%d", &n);
	p = (int *)calloc(n, sizeof(int)); //申请动态空间
	q = p; //将数组首地址存入q中
	for (i = 0; i < n; i++) {
		printf("请输入第%d个数字:", i + 1);
		if (i != n - 1)
			scanf("%d", p++);
		if (i == n - 1)
			scanf("%d", p);
	}
	p1 = plus; //p1指向函数plus
	sum = p1(q, n);  //使用函数指针p1调用函数plus
	printf("数组元素之和为:%d", sum);
	free(q);
}

/*编写函数,实现对数组内所有元素相加,并返回数组元素之和*/
int plus(int *p2, int numsSize) {
	int i = 0, total = 0, *end = p2 + numsSize - 1;
	for (i = 0; i < numsSize; i++) {
		total += *p2;
		if (p2 == end)  // 设置条件,防止指针p2指向数组外
			break;
		p2++;
	}
	return total;  //返回元素之和
}

输入和输出的结果。

 


定义形式

含义

int *p;

p为指向整型数据的指针变量,p是一个一级指针

int (*p)();

p为一个指向函数的指针,该函数的返回值为整型数据

int *p();

p为一个函数名,该函数的返回值为整数指针

int *p[n];

p为数组名,数组由n个元素,每个元素为指向整型的指针

int (*p)[n];

p为指向含有n个元素的一维数组的指针变量

int **p;

p为一个指针变量,它是指向一个整型指针的指针变量,即p为一个二级指针

void *p;

p为一个指针变量,基类型为void(空类型),不指向具体的对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值