【发布时间】:2015-02-13 17:21:11
【问题描述】:
考虑这段代码:
#include <stdio.h>
#define main_arg int argc, char *argv[]
int main(main_arg)
{
static char chr = '5' - '0'; // Dec 5
int *p = &chr; // 4 bytes pointer
printf("Result: %i", *p);
return(0);
}
Result: 5
为什么我必须将chr 声明为静态才能获得适当的值?
如果我不使用静态,p 将总共读取 4 个字节,接下来的 3 个将是“随机”的。但是如果chr表示的那个字节位于静态内存中,那不会发生吗?
那是未定义的行为,结果是不确定的,它就这样偶然发生了(我一直在尝试)?
【问题讨论】:
-
那是未定义的行为,结果是不确定的,只是偶然发生的?答案:是的。
-
静态内存很奇怪。
-
您正试图从分配的
char变量中读取sizeof int字节。由于sizeof int > sizeof char根据定义,这会产生未定义的行为(根据定义)。在声明static时获得正确的打印输出这一事实只是运气(机会问题)。 -
我会一样的。如果它至少可以显示一次不同的结果。
标签: c pointers memory-management static