9508|32

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

给你们看一句绝对诡异的 C语句 [复制链接]

今天捡起放了快两个星期的 C和指针 接着看。

看到一个很诡异的玩意,发个帖和大家分享分享。

  1. int array[10];
    int *ap = array + 2;

    //so,what does the follow expression mean?
    2[array] = 43; //////!!!!!????
复制代码


首先告诉大家,这是完全合法的一个语句,你可能会猜到它代表什么,但是为什么呢?

当然了,这绝对是一个蛋疼的不行的写法,发出来,一则是分享,二则它背后隐藏着C是如何实现下标的方法的秘密。
此帖出自编程基础论坛

最新回复

我就想问下,这用的到么  详情 回复 发表于 2013-2-2 14:09
点赞 关注
个人签名

强者为尊,弱者,死无葬身之地

 

回复
举报

7815

帖子

57

TA的资源

裸片初长成(中级)

沙发
 

测试的代码

  1. #include <stdio.h>

    int main(void)
    {
    int array[10];
    int *ap = array + 2;
    char i;

    for(i = 0;i < 10;i++)
    array[i] = 0;

    *ap = 45;
    4[array] = 10;

    for(i = 0;i < 10;i++)
    printf("%d\t",array[i]);
    printf("\n");

    return 0;
    }
复制代码
在cmd下用gcc编译通过,0警告,输出结果如我所想。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

34

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
原帖由 辛昕 于 2012-2-9 00:08 发表
#include int main(void){    int array[10];        int *ap = array + 2;        char i;                for(i = 0;i < 10;i++)                array = 0;                *ap = 45;        4[array] = 10;                for(i = 0;i < 10;i++)                printf("%d\t",array);        printf("\n") ...


结果是不是:
0        0        45        0        10        0       0        0       0       0
此帖出自编程基础论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

4
 
4[array] = 10;
这一句不理解
此帖出自编程基础论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

5
 

是诡异

在我看来不合语法,如这句:
2[array] = 43; //////!!!!!????
数组前边带2,不理解
此帖出自编程基础论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

6
 

胡总书记都说不折腾了,辛版主还在折腾

这样的题目会让全世界的程序员们不得好活的。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

7
 

回复 6楼 仙猫 的帖子

吓死我了,我看到最后回复是你,以为挨骂了......
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

8
 

回复 板凳 desert2008sz 的帖子

此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

9
 

回复 5楼 ddllxxrr 的帖子

哥们
2[array] 怎么看怎么诡异
那array[2]呢?

给大家一个提示:
2+b = b + 2

注意:
这事关乎 C的下标实现方式
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

10
 
2[array]=array[2]
此帖出自编程基础论坛

点评

正解  详情 回复 发表于 2013-1-6 16:39
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

11
 

回复 10楼 zjjone1023 的帖子

嘿嘿,还差一点点,再写一个等式,这答案就完美了
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

1万

帖子

16

TA的资源

版主

12
 

什么?本夫子,在单片机这行混了几年怎么就没听说过

一个数组array[2] = 2[array], 这能编译过去吗???

 

此帖出自编程基础论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

2787

帖子

23

TA的资源

至上芯片

13
 
这样也行,why
此帖出自编程基础论坛
 
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 

回复

170

帖子

0

TA的资源

一粒金砂(中级)

14
 
看的头晕
此帖出自编程基础论坛
 
 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

15
 
这样是合法的可以跑下就知道,
TO:辛昕,我用手机上的打符号不方便,回家了我把过程写上来其实就是指针的加减
此帖出自编程基础论坛
 
 
 

回复

119

帖子

0

TA的资源

一粒金砂(高级)

16
 
看不明白
给详细解释下
谢了
此帖出自编程基础论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

17
 
汇编里面是可以类似5[bx]这样寻址的,c编译器是不是也就让这么写的了吧~
此帖出自编程基础论坛
 
 
 

回复

53

帖子

1

TA的资源

一粒金砂(中级)

18
 
太偏門了...
此帖出自编程基础论坛
 
 
 

回复

117

帖子

0

TA的资源

一粒金砂(高级)

19
 
很久以前的谭浩强的C语言上也提到过,,
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

20
 

回复 15楼 zjjone1023 的帖子

哈哈,就你一个人说明白了。
你好像也是 看过 C和指针 这书?
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表