none
这种情况下[ void FuncA(char *p) ] (指针做为函数的参数), 函数内部规范或标准的写法 应该是如何写? RRS feed

  • 问题

  •  

    问题 1) 以下代码是有问题的, 但是在Test() 中, 我们不执行strcpy(str, "hello world"); printf(str);
    应也没有问题吧?
      

    void GetMemory(char *p)    --->char *p 是局部变量
    {
    p = (char*)malloc(100);
    }

    void Test(void)
    {
    char *str = NULL;
    GetMemory(str);
    strcpy(str, "hello world");   --> 对已经失效的变量操作
    printf(str);
    }

     

    问题 2) 平时我们写代码时,经常要用到类似的函数,规范或标准的写法  应该是如何写?

     

     

    void  AAAAA(char *p)
    {
         对P进行处理.

         ............

    }

     

    void  main()

    {

         AAAAA("var var");

         //// 以静态或全局变量或其它方式 将某些信息传出去比较好?

    }

     

     

    问题 3)  经常看到这样的代码(函数) [ void Func(char *buf) ], 指针做为函数的参数,这种情况下 ,规范或标准的写法  应该是如何写?

    2009年1月9日 4:20

答案

  •  

    你好,方法有两个

    1 指针的指针

    Code Snippet

    void GetMemory(char **p)  {
    *p = (char*)malloc(100);
    }

    void Test(void)
    {
    char *str = NULL;
    GetMemory(&str);
    strcpy(str, "hello world"); 

     printf(str);

    }

     

    2指针的引用

    Code Snippet

    void GetMemory(char *&p)  {
    p = (char*)malloc(100);
    }

    void Test(void)
    {
    char *str = NULL;
    GetMemory(str);
    strcpy(str, "hello world"); 

     printf(str);

    }

     

     

     

     

    2009年1月9日 4:38
    版主
  • 首先要明确在函数中除了的这个变量是否是对整个类,或者整个实例有效。还是只对其中的一部分内容有效,或者是只对函数的调用方有效。如果是这样,就不要用成员变量或者全局变量。是否使用返回值,传参数,成员变量或者其他作用于地变量作为沟通的渠道,要根据变量的实际作用来决定。比如你的类中有一个算法,还有一些其他的函数。变量如果只是算法使用,那么建议不要使用成员变量。或者重构这个类,因为它或许已经不具备高内聚了。建议看《重构-改善既有代码的设计》这本书。在3.14中提到了你说的这个问题。

    2009年1月11日 8:44
    版主

全部回复

  •  

    你好,方法有两个

    1 指针的指针

    Code Snippet

    void GetMemory(char **p)  {
    *p = (char*)malloc(100);
    }

    void Test(void)
    {
    char *str = NULL;
    GetMemory(&str);
    strcpy(str, "hello world"); 

     printf(str);

    }

     

    2指针的引用

    Code Snippet

    void GetMemory(char *&p)  {
    p = (char*)malloc(100);
    }

    void Test(void)
    {
    char *str = NULL;
    GetMemory(str);
    strcpy(str, "hello world"); 

     printf(str);

    }

     

     

     

     

    2009年1月9日 4:38
    版主
  • 谢谢 Splendour 的回复.

    2009年1月9日 6:40
  • 一个函数有参数(输入参数), 有返回值.但不光是 只是有参数和返回值与外界交流.

     

    也可以有类中公有私有等变量,静态全局变量与外界交流.

     

    以下这种试题 教学意义 大于 实际意义. 是不是这样?

     

    //////////////////////////////////////////////////

    void GetMemory(char *p)  

    {
    p = (char*)malloc(100);
    }

    void Test(void)
    {
    char *str = NULL;
    GetMemory(str);
    strcpy(str, "hello world");  

    printf(str);
    }

    /////////////////////////////////////////////////////

     

    2009年1月10日 15:08
  • 首先要明确在函数中除了的这个变量是否是对整个类,或者整个实例有效。还是只对其中的一部分内容有效,或者是只对函数的调用方有效。如果是这样,就不要用成员变量或者全局变量。是否使用返回值,传参数,成员变量或者其他作用于地变量作为沟通的渠道,要根据变量的实际作用来决定。比如你的类中有一个算法,还有一些其他的函数。变量如果只是算法使用,那么建议不要使用成员变量。或者重构这个类,因为它或许已经不具备高内聚了。建议看《重构-改善既有代码的设计》这本书。在3.14中提到了你说的这个问题。

    2009年1月11日 8:44
    版主