在下面的代码中,为什么变量i没有赋值1?
#include <stdio.h>
int main(void)
{
int val = 0;
switch (val) {
int i = 1; //i is defined here
case 0:
printf("value: %d\n", i);
break;
default:
printf("value: %d\n", i);
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我会收到一个警告,即i尽管int i = 1;它已经初始化,但仍未进行初始化
$ gcc -Wall test.c
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
printf("value %d\n", i);
^
Run Code Online (Sandbox Code Playgroud)
如果val = 0,那么输出是0.
如果val = 1或其他任何东西,那么输出也是0.
请向我解释为什么i声明变量但在开关内没有定义.标识符 …
我试过这些命令.
~$top
(ctrl + z)stopped the process
~$echo $?
147
~$top
(ctrl + c)killed the process
~$echo $?
0
Run Code Online (Sandbox Code Playgroud)
这里发生了什么,请解释一下,为什么它显示出一些恒定的价值.这些价值观的含义是什么?
我理解C中的结构概念.我也理解结构如何存储在内存中.所以我创造了以下内容:
struct tag1 {
char a;
int b;
}var1;
Run Code Online (Sandbox Code Playgroud)
结构的大小是8个字节(以gcc为单位).
内存布局示例.
-----------
| | | | | ---> char a (only 1 byte is used and remaining 3 bytes are padding)
-----------
| | | | | ---> int b (4 byte is used)
-----------
Run Code Online (Sandbox Code Playgroud)
现在我对这个示例程序有一些疑问.嵌套结构如何存储在内存中.
struct tag1{
int a;
struct tag2{
long b;
}var1;
}var2;
Run Code Online (Sandbox Code Playgroud) 我正在使用getpid并获取当前进程的pid。现在,我尝试使用进程名称获取其他进程的pid。如何获取其他进程的pid?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
printf("My pid:%d\n", getpid());
return 0;
}
Run Code Online (Sandbox Code Playgroud)