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);

 

 

}

 

posted @ 2011-12-27 20:21  os66  阅读(139)  评论(0编辑  收藏  举报