【问题标题】:A function that takes string parameter and returns integer pointer [closed]一个接受字符串参数并返回整数指针的函数
【发布时间】:2015-08-31 09:09:42
【问题描述】:

我想知道,如何在 c 中编写一个函数,为任何 string 输入返回 int 指针

下面的函数是我解决需求的尝试

int* methodname(char* param)
{
  int *a;
  int b=3;
  a=&b;
  return a; 
}

如有错误请指正。

【问题讨论】:

  • 不返回指向本地自动变量的指针。最好返回 int 本身。
  • 当您返回一个指向函数本地变量的指针时,您会得到一个悬空指针。
  • 为什么需要返回 intpointer ?您可以返回int。告诉我们更多关于你的计划和你打算做什么。也许是XY Problem
  • int 指向什么的指针?你想达到什么目的?
  • @NaveenKumar 这里的人们花了足够多的宝贵时间离开上述 cmets。请自己阅读它们,并提出sn-p。没有人在这里为您编写代码。感谢理解。

标签: c string function pointers int


【解决方案1】:

在问题的定义中,没有在函数上放置任何功能,以下将是没有 malloc 或未定义行为的正确实现:

int* methodname(char* param)
{
    return ((int *)param);  // just return the param as a pointer to int
}

【讨论】:

  • 是否存在悬空指针或内存泄漏的可能性?
  • 好吧,我把它留给你作为家庭作业。应该不会太难。
【解决方案2】:

返回本地地址未定义,参考以下代码。

int* methodname(char* param)
{
  int *p = malloc(5*sizeof(int));
  . . .
  return p; 
}

你的声明没问题,但定义没有意义,如果有面试官问这样的问题,他们的主要目的是检查你的编程能力,但你的定义不会给他留下深刻印象,只是写粗体(主要集中在语法,如何您正在返回并且没有未定义的行为)而不是实现无用的代码。

【讨论】:

    【解决方案3】:

    根据您的要求。此代码接受 char*(字符指针),并返回 int*(指向 int 的指针)。

    int* methodname(char* param)
    {
        int* b = malloc(sizeof(int));
        *b = 3;
        return b; 
    }
    

    注意

    您的代码与此代码之间的区别在于,您的代码返回了 int 指向局部变量的指针。函数退出后,局部变量将被销毁。在本例中,变量是通过malloc() 分配的。通过malloc() 分配的内存在函数调用之间保留。

    我建议通过 C 中的范围规则。

    编辑

    在 C 中没有称为 string* 的东西。带有终止 '\0' (NUL) 的 chars 数组被视为 string

    由于int 的内存是由malloc() 分配的,因此必须释放它以避免任何内存泄漏。当不再需要内存时,可以这样做。

    【讨论】:

    • 分配的内存没有被释放?那么内存泄漏的可能性?
    • @alk 已编辑。有更好的建议,欢迎编辑。 :)
    • 内存可以在方法外释放吧?分配给方法的变量
    • @alk 它并不总是一个“chars 的数组”。我的意思是,当使用 malloc() 分配内存时,它不称为数组
    • 总是一个数组。 C-“字符串”是一个0-终止的char-数组。不过,如何分配数组是另一回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2022-11-15
    相关资源
    最近更新 更多