zoukankan      html  css  js  c++  java
  • 2020.10.24 14课 指针(三)指针函数 函数指针(群发软件)

    指针三

    一二维数组名作为函数参数

    void showmap(int mapp[][10]){}
    func(const int array[])
    
    返回指针的函数(指针函数)
    //循环,进行判断 如果*—Str的值与_Val的值是一样的,那我们就返回这个_Str的地址
    
    字符类型的指针         字符数组     一个字符
    char* Mystrchr(const char*_Str,int _Val){
        if(_Str !=NULL){
            while(*_Str++ !='0'){
                if(*_Str == _Val){
                    return(char*)_Str
                }
                
            } 
        }
    }
    
    指向函数的指针(函数指针)
    1:函数的函数名就是指针就是内存中占据空间的编号
    2:如何通过P变量存储的指针编号去调用函数呢?
    void show(){printf("2131231")};
    
    int main(){
        int P=show;
       ((void(*)())p)();
        return 0;
    }
    //P存储的show函数的地址
    //show函数是void()
    //(void(*)()) (void(*))代表void类型的指针  ()代表函数
    ((void(*)())p)(); 解引用,类型强转
    
    第二种 void(*p)()=show; 定义
        *p指向的就是void show(); 中的show
    
    计算器
    int add(int x,int y){return x+y;}
    void show(int x,int y,int (*pFunc)(int x,int y)){//回调函数
        printf("%d
    ",pFunc(x,y));
    }  
    int main(){
        show(2,3,add);
        //也可以吧add换成任意自定义算法函数名
    }
    
    函数的函数名就是地址
    类型名+变量名+(函数参数);
     int    add     (int x,int y);
     int    (*p)   (int x,int y)
        
    

    三个函数 memset,memcpy,memmove

    内存设置,内存拷贝,内存移动
    char str[128];
    memset(str,0,128);//清空,吧str数组中占据的128字节全部清空
        
    
    定义 说明
    int i 定义整形变量
    int *p 定义一个指向int的指针变量
    int a[10] 定义一个int数组
    int *p[10] 定义一个指针数组,其中每个数组元素指向一个int型变量的地址
    int (*p)[10] 定义一个数组指针,指向int [10]类型的指针变量
    int func() 定义一个函数,返回值为int型
    int *func() 定义一个函数,返回值为int *型 指针函数
    int (*p)() 定义一个指向函数的指针,函数的原型为无参数,返回值为int
    int **p 定义一个指向int的指针的指针,二级指针

    指针变量 变量指针

    指针数组 数组指针

    指针函数 函数指针

    argc 使用软件时参数的个数,

    argv 参数的指令

    //指针的骚操作   三目运算符!!! bat的面试题
    
    /*	
    	1.c语言的三目运算和c++有区别吗???
    				有区别,c不能赋值,c++能赋值
    	2.如果有区别如何实现c语言和c++一样的效果???
    		*(a < Data[5] ? &a : &Data[5]) = 10086;
    */
    

    int Data[10] = { 10, 50, 30, 40, 50, 70, 80, 90, 100 ,1};
    
    int a =Data[0];
    
    int c = 0;
    
    //for (int i = 0; i < 10; i++){//*值的地址 解引用=赋值 
    *(a < Data[5] ? &a : &Data[5]) = 10086;
    //}
    printf("%d
    ", a);
    //printf("%d
    ", c);
    
  • 相关阅读:
    Delphi Excel 操作大全
    ThreadLocal类
    MyBatis实战总结
    MyBatis入门
    Mybatis逆向工程
    2020年全国高校计算机能力挑战赛初赛java组
    集合论基础
    命题与逻辑
    Redis技术概述
    UML图中6种箭头的含义
  • 原文地址:https://www.cnblogs.com/heerha/p/13961640.html
Copyright © 2011-2022 走看看