指针 c语言 f(x amp n),[工学]c语言 指针 详解.ppt

本文详细讲解了C语言中的指针操作,包括指针与数组的关系、指针的比较和运算,以及指针如何用于函数调用。通过实例展示了如何使用指针变量作为函数参数来传递和修改值。同时,介绍了函数型指针的概念,说明了如何通过函数指针调用不同函数,增加了函数调用的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[工学]c语言 指针 详解

例8.5 #include "stdio.h" void main ( ) { float *pi,x; scanf("%f",&x); pi = &x ; printf("%.0f\n",*pi); } 8.4 指针与字符串 字符串的引用有两种方法 四、 指针的运算 C仅允许指针作三种运算 ** 指针的比较运算(关系) ** 指针的减法运算 ** 指针与一个整数的加减运算 1. 指针的比较运算 假定两个指针变量 p, q,当两个指针指向同一个数组时,以下比较运算结果为逻辑值 p>q p 指针所指元素位于q所指元素之后时为1 p=q p指针所指元素位于q所指元素之后(或两指针指向同一元素)时为1 p q int a[6] 2. 指针的减法运算 两指针p,q指向同一数组 p-q的结果为p所指元素与q所指元素之间相隔的元素的个数(不是地址值之差,也不是变量值之差) 3. 指针与整数的加减运算 当一个指针指向一个数组时,指针与一个整数n 相加或相减,表示将指针向后或向前移动了n个元素 p<=q p指针所指元素位于 q 指针所指元素之前(或两指针指向同一元素)时为 1 p==q 两指针指向同一元素时为 1 p!=q 两指针不指向同一元素时为 1 例题: 1 若定义char *p="I am a student"; 则 *(p+4)的值为: 2 若定义int a[4]={ 0,1,2,3},*p; p=&a[1]; 则++(*p)的值为: 3。下列程序中,数组a的地址为ffe2,问第二个printf语句执行后的结果为: main( ) { static int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p; p=a; printf("%x\n",p); printf("%x",p+9); } 8 .5 指针与函数 一个指针,指向一个函数 定义了函数之后,系统为该函数分配一段存储空间,其中函数的起始地址,称为该函数的入口地址,将此地址赋给另一个变量,则该变量为一个指向函数的指针 8.5.1函数型指针 函数型指针的定义 1 格式: 类型 (*标识符)( ) 2 说明:类型为被指针所指函数的返回值的类型,标识符为一个指针名,(不是函数名),括号中为空,但必须有,表示该指针是专指函数的 只能指向函数 定义中的(*…..)括号不能省略 通过指针调用函数 三 、函数型指针的赋值 用函数名为指针初始化,表示指针指向该函数 int (*pf)( ); int f( ); 指针变量名=函数名 pf=f; (指针 pf 指向函数f( ) ) 应用: 增加了一种函数调用的方式 8 .5 指针与函数 f(int x,int y) { retrun(y-x); } main() { int (*pf)( ); int a,b,k; scanf("%d,%d",&a,&b); pf=f ; k=(*pf)(a,b); printf("%d,%d,%d\n",a,b,k); } 相当于k=f(a,b) 用函数名为指针赋值 输入:100 ,200 输出:100,200,100 例8.20 求a和b中的较大的 main() { int (*p)( ); int a,b,c; p=max; scanf("%d,%d",&a,&b); c=(*p)(a,b); printf("%d,%d,%d",a,b,c); } max(x,y) int x,y; { return(x>y?x:y); } 定义函数型指针 用函数名为指针赋值 通过指针调用函数 8 .5 指针与函数 函数的调用可以用函数名(第7章),也可以用指针 (*p)()定义之后,不是固定指向某一个函数,可以先后指向不同的函数(用新的函数名重新赋值) 用函数名为指针赋值时,不必用参数 用函数指针调用函数时,用(*p)代替原函数名 说明: 8 .5 指针与函数 关于函数,返回值为指针 指针型函数的概念 函数调用的结果,通常得到一个返回值,带回主调函数,如果返回值为一个指针,则该函数就是指针型函数 8.5.2指针型函数的定义 格式:类型 *标识符(参数表) 说明:类型为指针所指变量的类型,标识符为函数名,不是指针名,参数为函数的形参 定义函数,不是指针 main() { char *p,ch='C'; char str[]="Pascal,C,Fortran,Visual C++"; printf("string starts at adres

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值