c - 为什么下面的输出?

标签 c visual-c++ gcc

我正在使用gcc并编写了一个小程序,如下所示:

#include<stdio.h>

void doing(){
    char buf[4096 + 1];
    printf("buf %d\n", buf);
    printf("buf %f\n", buf);
    printf("buf %d\n", (unsigned) buf);
    printf("buf %s\n", buf+2);
    printf("buf %d\n", buf+2);

}


int main (void){
    char buf[4096 + 1];
    printf("(unsigned) buf %d\n", (unsigned) buf);
    doing();
    printf("(unsigned) buf %d\n", (unsigned) buf);
    return 0;
}


该程序的输出为:

(unsigned) buf 2268303
buf 2264159
buf 0.000000
buf 2264159
buf
buf 2264161
(unsigned) buf 2268303


我不知道为什么将2268303打印为整数,并且从2268303值中提取值,而一个函数将值设为2268303,而另一个函数则将值设为2264159

最佳答案

请阅读C基础知识。您将得到答案。

关于,


  一个函数的值为2268303,另一个函数的值为2264159


可以看到,在main()中声明了一个char buf [],而在doing()中声明了另一个。两者都有不同的存储,并且都将在各自的范围内工作。 [阅读C语言中变量的范围]

关于c - 为什么下面的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966065/

相关文章:

c++ - -D_GLIBCXX_USE_CXX11_ABI=1 对 CentOS 7 上的 devtoolset-7 无效

Code::在 C 中使用 OpenCV "undefined reference to ` cvFree _'|"时 block 返回错误

c - sprintf() 是否需要格式说明符才能正常工作?

c - C 预处理器能够逐字符处理字符串吗?

C++如何将argv作为字符串保存到 vector

visual-studio - Visual C++浏览信息

c++ - 未定义的函数引用,当在 Windows 上使用 if 定义时(在 Linux 上可以)

使用不同缓冲区进行 CRC 计算

debugging - 除了查找可重现的内存泄漏之外,我还可以使用 Visual C++ 调试 CRT 分配 Hook 做哪些有用的事情?

从 c 调用汇编函数