C:奇怪的printf行为

时间:2015-09-13 10:44:40

标签: c printf

我现在正在学习C,并决定用指针进行一些实验。我编译并执行以下代码:

object(app\models\User)#80 (12) { 
["id"]=> int(2) 
["username"]=> string(4) "demo" 
["password"]=> string(32) "fe01ce2a7fbac8fafaed7c982a04e229" 
["authKey"]=> string(10) "test101key" 
["accessToken"]=> string(9) "101-token" 
["email"]=> string(12) "test@mail.ml" 
["user_roles_id"]=> int(1) 
["role_id"]=> NULL 
["role_name"]=> NULL 
["member_since"]=> int(1442061812) 
["name"]=> string(6) "Kirsan" 
["surname"]=> string(6) "Kayfat" }

执行代码给出:

int main()
{
    float a = 8;
    int *b, *c;
    b = &a;
    c = &b;
    printf("%d\n%d\n%d\n", a, b, c);

    exit(0);
}

现在,我知道我试图将浮点数打印为整数。当我使用浮点数打印出来时,我得到了所需的结果(浮点数和2个内存地址)。

如果我将它(错误地)打印为整数,它似乎打印一个内存地址作为。 b被打印为另一个存储器地址(这是正确的,因为它是一个地址),并且由于某种原因c为0。看起来printf实际上是以某种方式改变了一些数据。

有人能解释一下这里发生了什么吗?

我使用GCC作为编译器btw。

0 个答案:

没有答案