C语言指针梳理

本文详细介绍了C语言中指针的五种形式,包括指针变量、函数指针、数组指针等,并阐述了指针与数组、字符串、函数之间的关系,特别是如何通过指针操作数组元素和调用函数。同时,通过实例展示了如何使用函数指针来调用函数,加深了对C语言指针的理解。
摘要由CSDN通过智能技术生成

C语言指针梳理

1.指针的几种形式说明

指针是包含另一变量的地址的变量。
(1)int *p:p是一个指针,指向一个整型数。
(2)int *p():p是一个函数,该函数返回一个指向整数的指针。
(3)int (*p)():p是一个指针,该指针指向一个函数,这个函数返回一个整数。
(4)int *p[]:p是一个数组,该数组的每一个元素是指向整数的指针。
(5)int (*p)[]:p是一个指针,该指针指向一个数组,这个数组的每一个元素是一个整数。
(6)int *(*p)():p是一个指针,该指针指向一个函数,这个函数返回一个指向整数的指针。

2.指针与数组、函数的关系

(1)对于一维数组 int a[i] 或指针 int *a
a+i 指向 a[i]
(2)对于字符串 char s[i] 或指针 char *s
s+i 指向第 i个字符 s[i]
(3)对于二维数组int a[i][j]
*a+j 指向 a[0][j]
*(a+i) 指向 a[i][0]
*(a+i)+j 指向 a[i][j]
例:对于 a[2][3]={1,2,3,4,5,6,}; 有 ((a+1)+2)=6;
(4)对于字符串数组char p[i][j] 或字符型指针数组char *p[i]
*p+j 指向第 0个字符串的第 j个字符
*(p+i) 指向第 i个字符串的第 0个字符
*(p+i)+j 指向第 i个字符串的第 j个字符
例:对于 *p[]={“ABC”,“DEF”}; 有 ((p+1)+1)=‘E’;
例:对于 char p[][3]={“ABC”,“DEF”}; 有 ((p+1)+1)=‘E’;
(5)对于指针数组int *a[i]
a[i] 指向 变量i
即 *a[i]=变量i 或 a[i]=&变量i

3.用函数指针调用函数举例

int Func(int x);/*声明一个函数*/
int (*p)(int x);/*定义一个函数指针*/
p = Func;/*将Func函数的首地址赋给指针变量p*/

赋值时函数Func不带括号,也不带参数。由于函数名Func代表函数的首地址,因此经过复制以后,指针变量p就指向函数Func()代码的首地址了。

#include<stdio.h>
int Max(int,int);//函数声明
int main(){
	int(*p)(int,int);//定义一个函数指针
	int a,b,c;
	p = Max;//把函数Max赋给指针变量p,使p指向Max函数
	printf("please enter a and b:");
	scanf("%d%d",&a,&b);
	c = (*p)(a,b);//通过函数指针调用Max函数
	printf("a = %d\nb = %d\nmax = %d\n",a,b,c);
	return 0;
}
int Max(int x,int y)//定义Max函数
{
	int z;
	if(x>y){
		z = x;
	}
	else{
		z = y;
	}
	return z;
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值