如何使struct指针指向静态char数组

时间:2015-06-25 16:46:19

标签: c function pointers static return

在下面的代码中,函数返回一个未初始化的指针。

static abc* xyz(int a)                
{
    abc *z; 
    return(z);
}

如何修改此函数,以使此指针指向静态char数组。有任何建议请。

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题(有点奇怪,恕我直言),你想要的是什么( with VLA support

static abc* xyz(int a)      //int a is unused here              
{
    abc *z = NULL; 
    static char buf[sizeof(abc)];  //static char array

    z = abc;

    return z;
}

注意: FWIW,static不是函数返回类型或值的“存储类”。这并不意味着该函数必须具有static变量作为带有return语句的表达式。

相反,这是函数定义的一部分(确切地说是声明 - 说明符),表示该函数具有内部llinkgae。换句话说,功能的可见性仅限于该特定翻译单元。

相关,来自C11,章节§6.9.1,函数定义语法

  

函数的定义:
   declaration-specifiers声明符声明列表 opt compound-statement

  

声明说明符中的存储类说明符(如果有)应为externstatic

然后,章节§6.2.2,第3段,

  

如果对象或函数的文件范围标识符的声明包含存储类说明符static,则标识符具有内部链接。

如果上述说明有意义,this related answer也会这样做,可能以更好的方式

在此笔记之后,我想您希望有一个更正的版本的上一代码,看起来像,

static abc* xyz(int a)      //int a is unused here              
{
    abc *z = NULL;
     //some code
    z = malloc(sizeof(*z)); //sanity check TODO
     //some more code
    return z;
}

唯一的事情,一旦你完成使用它,你需要free()返回的指针。

答案 1 :(得分:0)

您可以使用这样的静态局部变量:

static abc* xyz(int a){
  static abc z;
  return &z;
}