0
#include <stdio.h>

main()
{

    int i = 10;
    static int a = i;
    if(a==10)
        printf("yes 1st comparision is equal\n");
    else
        printf("no 1st comparision is not equal\n");
    if(i==10)
        printf("yes 2nd comparision is equal\n");
    else
        printf("no 2nd comparision is not equal\n");

    a=15;
    if(a==i)                                              
        printf("yes 3rd comparision is equal\n");
    else
        printf("no 3rd comparision is not equal\n");

}

为什么a重新初始化为 15,输出是no 3rd comparision is not equal ,而输出应该是yes 3rd comparision is equal

4

3 回答 3

1

您要比较的是两个不同的值。

从您的问题来看,您似乎期望的是引用(通常使用指针实现)。

这个例子和静态无关,因为函数main只输入一次。

如果参考是您所追求的,这是一个非常简化的用法:

#include <stdio.h>

int main() {
    int i = 10;
    int* const a = &i;
    if (*a == 10)
        printf("yes 1st comparision is equal\n");
    else
        printf("no 1st comparision is not equal\n");
    if (i == 10)
        printf("yes 2nd comparision is equal\n");
    else
        printf("no 2nd comparision is not equal\n");

    *a = 15;

    if (*a == i)
        printf("yes 3rd comparision is equal\n");
    else
        printf("no 3rd comparision is not equal\n");

    return 0;
}
于 2012-08-24T17:55:11.373 回答
0

您的问题“为什么“a”被​​初始化为 15”的答案是您将值分配给“a”。当您将其声明为时,它已初始化为 10

静态int a = i;

其中 i = 10。当你这样做

a=15;

“a”的值发生变化。您没有再次声明“a”。您也没有更改“i”的值。因此,比较失败。如果您不想更改“a”的值,请将其声明为“const”变量。

希望这能回答您的问题。阿迪亚

于 2012-08-24T18:49:04.937 回答
0

在下面的示例static int count1 = 0;中是初始化(在声明时赋值)。Andcount1++;等价于count1 = count1 + 1;and 这是赋值而不是初始化。

count第一次调用函数static int count1 = 0;将被执行并分配 0,并且count1++还将分配1给 staitc 变量count1。而第二次调用count函数static int count1 = 0;将不会被执行,count1++将被执行并2分配给count1.

void count(void) 
{ 
    static int count1 = 0; 
    int count2 = 0; 
    count1++; 
    count2++; 
    printf("\nValue of count1 is %d, Value of count2 is %d", count1, count2); 
} 

初始化意味着在该变量的声明期间(在初始阶段)为该变量分配一个值。声明后赋值只是赋值而不是初始化。

对于静态变量,初始化只会进行一次,但赋值可以进行任意次数。

现在在你的第一个程序中,你正在做a=15;,你在想=第二次++操作是不可能的,并且对于一个静态变量可以多次操作。

在您的程序a=15;中也可以编写如下++操作。

for(j = 0; j = 15; j++)
{
    a++;
}

所以赋值(=)操作在静态变量上也是有效的,即使在第二次也是如此。

于 2012-08-25T09:35:43.407 回答