C 结构和静态结构有什么区别?

C 结构和静态结构有什么区别?,c,struct,static,C,Struct,Static,当我查看linux设备驱动程序代码时,我看到了下面的代码,我不明白为什么他们提到了静态结构 static struct resource imx_uart1_resources[] = { [0] = { .start = 0x00206000, .end = 0x002060FF, .flags = IORESOURCE_MEM, }, [1] = { .start = (UART1_MINT_RX), .end = (UART1_MINT_RX), .fl

当我查看linux设备驱动程序代码时,我看到了下面的代码,我不明白为什么他们提到了静态结构

static struct resource imx_uart1_resources[] = {
[0] = {
    .start = 0x00206000,
    .end = 0x002060FF,
    .flags = IORESOURCE_MEM,
     },
 [1] = {
.start = (UART1_MINT_RX),
.end = (UART1_MINT_RX),
.flags = IORESOURCE_IRQ,
  },
};

谁能解释“静态结构”的必要性和必要性

关键字
static
有许多含义,这取决于使用该关键字的上下文

如果在函数中声明了结构的数组,则表示该数组具有静态存储持续时间,而不是自动存储持续时间

考虑下面的例子

#include <stdio.h>

struct A
{
    int x;
};

struct A * f( void )
{
    struct A a = { 10 };

    return &a;
}

int main( void ) 
{
    struct A *pa = f();
    printf( "pa->x = " );
    printf( "%d\n", pa->x );
}
另一方面,如果在函数中,对象将具有静态存储持续时间,那么程序将是格式良好的,因为退出函数后对象将处于活动状态

#include <stdio.h>

struct A
{
    int x;
};

struct A * f( void )
{
    static struct A a = { 10 };

    return &a;
}

int main( void ) 
{
    struct A *pa = f();
    printf( "pa->x = " );
    printf( "%d\n", pa->x );
}
对象将在函数调用之间保持其值。比如说

#include <stdio.h>

struct A
{
    int x;
};

struct A * f( void )
{
    static struct A a = { 10 };

    return &a;
}

int main( void ) 
{
    struct A *pa = f();

    printf( "pa->x = " );
    printf( "%d\n", pa->x );

    pa->x = 20;

    pa = f();

    printf( "pa->x = " );
    printf( "%d\n", pa->x );
}
如果结构的数组在任何函数之外声明,则意味着(除了静态存储持续时间,默认情况下)数组名称具有内部链接,即在声明它的编译单元之外,它是不可见的


如果多个编译单元使用关键字static包含相同的数组声明,那么每个编译单元都有自己单独的数组实例。

关于static的含义,还有很多其他示例。至于为什么有必要,你没有展示足够的代码让任何人给你答案。可能重复No@Joe。我的问题是,struct和static struct之间有什么区别。TIAWell static具有相同的行为,无论它是应用于结构还是其他任何东西。至于为什么这个是静态的,我们需要了解它的使用上下文。
imx\u uart1\u资源
是静态的。这是一个
结构资源数组
。你能解释一下stuct和static stuct的区别吗?谢谢你的回答@Vlad fromMoscow@Raj完全没有。我们初学者应该互相帮助。:)
pa->x = 10
#include <stdio.h>

struct A
{
    int x;
};

struct A * f( void )
{
    static struct A a = { 10 };

    return &a;
}

int main( void ) 
{
    struct A *pa = f();

    printf( "pa->x = " );
    printf( "%d\n", pa->x );

    pa->x = 20;

    pa = f();

    printf( "pa->x = " );
    printf( "%d\n", pa->x );
}
pa->x = 10
pa->x = 20