我现在正在学习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。