动态 版块 发帖 消息 我的
Loading...
小绿叶技术博客
小绿叶技术博客
小绿叶技术Lv149   
c 语言指针函数 与回调函数     


指针函数,  每一个变量 都有一个内存地址


#include <stdio.h>
 
int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 为 int 整数类型 */
 
   ip = &var;       /* 在指针变量中存储 var 的地址,使用 & 运算符访问内存地址 */
 
   printf("var 变量的地址: %p\n", &var  );
 
                    /* 在指针变量中存储的地址 */
   printf("ip 变量存储的地址: %p\n", ip );
 
                     /* 使用指针访问值 */
   printf("*ip 变量的值: %d\n", *ip );
 
   return 0;
}

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */



指针函数比较


#include <stdio.h>
 
int max(int x, int y)
{
    return x > y ? x : y;
                              // ? 符号是疑问     : 是条件判断,如果 x 大于 y 则返回 x ,否则返回 y

}
 
int main(void)
{
                               /* p 是函数指针 */
    int (* p)(int, int) = max; // 函数指针变量 p,指向函数 max
    int a, b, c, d;
 
    printf("请输入三个数字:");
    scanf("%d %d %d", & a, & b, & c);
 
                               /* 与直接调用函数等价,d = max(max(a, b), c) */
    d = p(p(a, b), c); 
//  d = max(max(a, b), c);     // 等价此规则, 括号先后顺序:p(a, b) 先比较 a 和 b 后返回大的一个数,再与c 比较

    
    printf("最大的数字是: %d\n", d);
 
    return 0;
}









#----------- 指针回调函数 -------#


你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数


含义:

1. 定义 随机数函数:int suiji(void)

2. 定义回调函数:void huidiao

3. main 函数:调用回调函数,传值数组,指定数量4 个,数值参数来源:随机数。main 执行一次,调随机数一次,并且赋值一次





#include <stdlib.h>  
#include <stdio.h>
 
/*
C 库函数 - fread()
ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
size -- 这是要读取的每个元素的大小,以字节为单位。
nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。
*/

// 定义 无类型回调函数 huidiao
void huidiao(int *array, size_t arraySize, int (*getNextValue)(void))
{
// 定义指针函数 array 
// 成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型

    for (size_t i=0; i<arraySize; i++)
// 由于下面的main 调用本函数,传值给我,分别为:myarray, 4, suiji   刚好为 本函数属性三个变量对应赋值

        array[i] = getNextValue();
}
 
// 获取随机值
int suiji(void)
{
// 定义 int 类型函数,函数属性为无类型
    return rand();
// 返回:  C 标准库 – <stdio.h>  rand 随机数函数
}
 


int main(void)
{
    int myarray[4];
    // 定义数组 ,元素数量为 4 个
    /* suiji 不能加括号,否则无法编译,因为加上括号之后相当于传入此参数时传入了 int , 而不是函数指针*/
    huidiao(myarray, 4, suiji);
// 调用回调函数,并且将值传给上面 huidiao 函数。属性:数组变量,长度为3位数,和随机函数数组

    for(int i = 0; i < 4; i++) {
        printf("%d ", myarray[i]);
// 读取数组角标 4 个元素
    }
    printf("\n");
    return 0;
}











 0  已被阅读了136次  楼主 2022-07-08 15:02:48
回复列表

回复:c 语言指针函数 与回调函数

guest
登录之后更精彩~
Powered by HadSky 7.7.16
© 2015-2022 PuYueTian
您的IP:8.219.134.200,2022-08-10 06:14:43,Processed in 0.01256 second(s).
Powered by HadSky
小绿叶技术博客