gpt4 book ai didi

c - C语言中的内存寻址

转载 作者:行者123 更新时间:2023-11-30 20:48:20 25 4
gpt4 key购买 nike

我用 C 编写了这个小代码:

#include <stdio.h>

int alo();

int main()
{
printf ("%d",alo());
}

int alo(int i, int x)
{
return (x);
}

但似乎当我运行它时没有给 alo 提供任何参数它打印一个完全随机的数字。

我只是想知道,因为我认为它不可能是 100% 随机的,所以这个数字实际上是多少,它来自哪里,以及我是否可以预测它。请注意,这纯粹是好奇心。

我猜它有一些处理内存读取的东西,但是这个特定的错误到底是如何起作用的?

最佳答案

您的 alo 函数接受(即需要!)两个参数,但您在调用它时没有任何参数。在这种情况下,行为未定义。

您在没有原型(prototype)的情况下声明了函数(在 main 之前)。这意味着您有责任在对 alo 的所有调用中提供正确数量、正确类型的参数。编译器不会帮助您验证此类调用的正确性。

因此,一个好主意是始终使用原型(prototype)声明函数

int alo(int i, int x);

这样编译器将帮助您确保正确调用函数。

<小时/>

在实践中,alo的实现盲目地遵循其参数传递约定,并读取应该包含参数x值的存储位置。结果值从 alo 返回。

使用什么样的存储位置来传递x取决于实现细节。它可以是内存区域或 CPU 寄存器。在从 alo 返回调用之前,该存储位置中存在任何剩余/垃圾值。

关于c - C语言中的内存寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43075645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com