考验鱼油们的机会来了
本帖最后由 fishshuke 于 2017-10-27 11:20 编辑最近遇到一种非主流数组的表达方式,之前遇到一回所以我认得。但是,问了不少学习C语言的朋友们。大家普遍表示还有这种操作?!
特来咱们论坛请高手帮忙解答,这是为什么?
#include"stdio.h"
int main()
{
int a={0,1,2,3,4,5}
printf("%d", a);
printf("%d", 5);
return 0;
}
结果显而易见是a=5
请鱼油们解释这是为什么?{:5_91:} 我觉得是这样的:
数组的表示在c语言中只是一种语法糖,其在编译中会被翻译为指针的形式
所以 a == *(a + 5)
而 5 == *(5 + a)
两种形式都相当于对a指向的地址平移了5个单位(这里,每个单位为一个int) 自己的帖子,自己坐沙发。{:5_92:} 第一个printf a没有索引越界? 一般没有出现这种写法,不过C语言支持那就行了...
下面是上面代码的汇编...
a 和 4 汇编都是做相同的事情.. BngThea 发表于 2017-10-26 22:01
我觉得是这样的:
数组的表示在c语言中只是一种语法糖,其在编译中会被翻译为指针的形式
所以 a == *( ...
太棒啦{:5_106:} 本帖最后由 fishshuke 于 2017-10-27 11:25 编辑
橙C 发表于 2017-10-27 10:05
一般没有出现这种写法,不过C语言支持那就行了...
下面是上面代码的汇编...
a 和 4 汇编都是做相同 ...
你的答案是对的!但是论坛只能评选一个最佳答案。所以,我只能按照时间先后顺序了。我把最佳答案给了上面的一个朋友。希望你能够理解。{:5_106:}
页:
[1]