• 2011 无代码无意义…test 指针 v1


    引:/*函数指针三部曲,一声明,一赋值,一调用**/

    Strcpy弱点

    函数内部char *,char []

    数组指针的赋值:

    //详细代码

    #include "stdafx.h"

    #include "指针1.h"

    //#include <include/string.h>

    #include "string.h"

    void test_strcpy(){

        char Ch_a[10]="123456789";

        char Ch_b[10];

        strcpy(Ch_b,Ch_a);

        printf("%s \n",Ch_b);//竟然没有赋值结尾,也有值。。

    }

    char * m_returnStr1(){

        char Ch_a[]="i am str1";

        return Ch_a;

    }

    char * m_returnStr2(){

        char * Ch_b="i am str2";

        return Ch_b;

    }

     

    void test_局部函数声明数组or指针(){

        printf("first inside array\n");

        //char* Ch_a,Ch_b;//看来声明为

        char *Ch_a;

        char *Ch_b;

        Ch_a=m_returnStr1();

        printf("%s\n",Ch_a);

           printf("%p\n",Ch_a);

        printf("now inside pointer\n");

        Ch_b=m_returnStr2();

        printf("%s\n",Ch_b);

           printf("%p\n",Ch_b);

    //就如预料样,前者 在局部函数就是一个stack 变量,返回一个随机量。

    }

    //做完测试后,发现就 坚持 匹配观点,就是

    //一句话 vs上面,跨纬度的位置,就是error..

    //不用 教科书如何 如何 夸张。。

    void 测试函数(){

        printf("call fcuntion\n");

    }

    void test_函数指针1(){

    /*函数指针三部曲,一声明,一赋值,一调用**/

        void (*p)();

                      //p=测试函数;//p=..;p=&f都可以

        *(int *)&p =(int)测试函数//   //特点就是 包了一层,又解开。我认为。

           ;

        (*p)();

    }

    void test_a_a地址区别(){

        //来源 深入解剖

        char Aa[5]={'a','b','c','d'};

        char (*chP1)[5]=&Aa;  //二阶?

           printf("%p/n",chP1+1);//66结果当然 5个单位

           //测试2 注意结合顺序,结果触发0页面异常,直接注释

           //(*(void(*)())0)();

           //     (*    (void(*)()   )0) ();

    /**************************************

    数组指针的赋值: 无论维度大,相等,还是小,都不能吗?

    **************************************/

           //测试一段函数指针

           //测试4

           //由于报错,直接注释下面模块

               //int a[5][5];

               //int(*p)[4];

               //p=a; //error C2440: “=”: 无法从“int [5][5]”转换为“int (*)[4]”

               //printf("%p %p\n",&a[4][2],&p[4][2]);

               //printf("a_ptr=%p,  p_ptr=%p\n",&a[4][2],&p[4][2]);

               ////printf("%p,%d\n",&p[4][2]-&a[4][2],&p[4][2]-&a[4][2]);

           //end

        //  char (*chP2)[5]=a;//vs上,这种赋值,

    todo   //  //error C2440: “初始化”: 无法从“char [5]”转换为“char (*)[5]”

        //printf("%p/n",chP2+1);

    //下面的用例无法通过。维度不同//无法从“char [5]”转换为“char (*)[10]”

        //char (*chP11)[3]=&a;

        //char (*chP12)[3]=a;

        //printf("%p/n",chP11+1);

        //printf("%p/n",chP12+1);

        //char (*chP21)[10]=&a;

        //char (*chP22)[10]=a;

        //printf("%p/n",chP21+1);

        //printf("%p/n",chP22+1);

    }

  • 相关阅读:
    手把手教你开发Chrome扩展二:为html添加行为
    使用Quartz.NET实现定时发送电子邮件
    手把手教你开发Chrome扩展三:关于本地存储数据
    Android中调用Web Services
    nestedlist的学习
    overlays、picker理解解析
    navigationview的理解
    bBank 更新记录(最后更新:201076)
    开博
    javascript 密码强度规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
  • 原文地址:https://www.cnblogs.com/titer1/p/2303927.html
Copyright © 2020-2023  润新知