开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
C
问题(Question):
char *aa;
int *bb;
short *cc;
aa, bb, cc 的内容都是0,请写出 *(aa+3), *(bb+6), *(cc+10) 所指到的位置
补充说明(Supplement):
只到的地方都NULL没有宣告阿,是在问什么?
没看错的话 应该是问你三个char 六个int 十个short多大吧..?
想考你知不知道指标上的加号跟指标类型有关不过他的问法满奇怪的
作者:
EdisonX (卡卡兽)
2015-03-13 17:46:00aa=3 bb=24 cc=20,猜要的是这个
作者:
OPIV (Monitor)
2015-03-13 19:29:00*(aa+3)什么的的型态又不是指标 怎么会问指到哪里= =
我猜他想问的是&(*(aa+3))吧?只是的确都是undefined behavior... XD 根本不知道有没有吃到不该吃的内存* = 提取,这动作会要命的
作者:
suhorng ( )
2015-03-14 01:23:00但是就算不提取, 只要原本不是指到正确的真实存在的东西,而且索引在范围内, 就未定义吧
指过去不会有事 提取才会有事基本上你喜欢高兴爱int *i = 1234567也是可以的...当然int是不能赋值给pointer啦 不过 int *i = NULL;i += 10; 基本上都不会出事,只有在提取的时候会炸比方说cout << *i; 就死了“乱指没关系,但是不能提取一个不该提取的位置”
作者:
suhorng ( )
2015-03-14 02:34:00不是 undefined behavior 吗?
但是你单纯cout << i;你会发现它指标正确的指到0x28undefined behavior指的是“提取不该提取的指标”
作者:
suhorng ( )
2015-03-14 02:36:00n4296 5.7.4 这边定义运算时只有针对阵列才有定义的样子?
maa, 你的意思是说*(aa+3)如果移动3*sizeof(aa)要是out of bound的话就会变成undefined吗?我的认知是aa+3仍然有效 但是*(aa+3)的* (提取)是UB但是他说的是“指到的位置”(有点语焉不详的感觉)
作者:
Feis (永远睡不着 @@)
2015-03-14 13:02:00照标准应该是 aa 跟 aa+1 合法, aa+3 是 UB还是我误会了些什么. aa 到底是不是指标 xD我看到 3*sizeof(aa) 有点疑惑阿. 我的前提是 aa 真的要指到东西啦.. Orz如果 aa 有指到东西 aa+1 就合法, 但是 aa+3 不行但是 *(aa+1) 也是 UB如果 aa 是乱指的话, aa+1, aa+3 都不行. 加 * 就都不行
作者:
suhorng ( )
2015-03-14 13:12:00刚好超过一格好像还可以XD 假设 aa 指到长度为 3那 aa, aa+1, aa+2, aa+3 (刚好超过一格)好像都可
作者:
Feis (永远睡不着 @@)
2015-03-14 13:14:00原则上就是要指到同一个阵列内或阵列后一格如果指向的不是阵列的话, 会当作只有一个元素的阵列suhorng: 我上面其实是想解释如果指向的不在阵列内如果 i 是 null pointer, 那 i + 10 是未定义
作者:
suhorng ( )
2015-03-14 13:24:00i see
作者:
Feis (永远睡不着 @@)
2015-03-14 13:31:00不过这个问题不已经是 FAQ 了吗. Q_Q