假设我正在编写一个C程序:
int a = 1;
int b = 5;
int *p = &a;
威尔:
int k = *(p+1);
总是给k = 5
?
形式上:
这个变量'地址的“连续”属性是否依赖于堆栈实现?如果没有,是否有任何保证(例如&a < &b < &p
)?
(这个在ubuntu上使用gcc的简单测试给出k=5
,但涉及不同类型的其他测试不起作用)
答案 0 :(得分:6)
否...... 虽然它可能会出现在大多数平台上绝对不能保证你的代码会产生5.你所拥有的是未定义的行为,这可能导致你的程序。永远不要依赖未定义的行为,完全停止。