【娱乐向】c/c++语言不能说的秘密

大家都爱c/c++不是吗? 


c/c++有着丰富的模板库,such as<map><stack><queue><ext\pb_ds\priority_queue.hpp>...真是喜闻乐见啊,但是谁知道呢,在C的内心最深处,还隐藏者那些不能说的秘密。

 

SECRET _1

(数组魔法,规整的数组有一颗癫狂的心)

我们来看这样的几行代码

1 for(int i=1;i<=n;i++)   scanf("%d",&a[i]);
2 for(int i=1;i<=n;i++)   printf("%d ",a[i]);

舒服吧?就是这么牛(啥?),这就是今天的全部内容了,谢谢大家(滚回来继续说)

//input
1 2 3 4 5
//则output
1 2 3 4 5

 

这个你在不懂说不过去了吧,作为一个(BLABLABLA)。。。我们应该快速进入正题。

我们还有一个代码,如下。

for(int i=1;i<=n;i++)   printf("%d ",i[a]);
//则output
1 2 3 4 5

天哪!是我的编译器出问题了吗?

其实不然,这涉及到数组指针的操作。

在代码片段1中,有

printf("%d",a[i])
//实际上数组a[]也可以视作是一个int*类型的a
//此时的操作等价于
printf("%d",(a+i));

那么不就好说了吗?==》i[a]==(i+a)==(a+i)==a[i];

SECRET_2

(恐怖的符号趋向于)

(恐怖故事气氛)然而在许多年以前,还有一个恐怖的符号!他的名字叫趋向于,关于他的记载,大概是这样的。

他有一个普通的面貌:“<--”这就是那位大魔头!

他大概是这样被使用的。

1    cin>>n;
2    while(0<--n){
3        cout<<n<<" ";
4    }

我们有

//input
5
//output
4 3 2 1

强大吧?

据说他还有一个兄弟,快速趋向于

1    cin>>n;
2    while(0<----n){
3        cout<<n<<" ";
4    }

和一个强壮的父亲,加速趋向于

1    cin>>n;
2    while(0<------n){
3        cout<<n<<" ";
4    }

还有一个神话般的叔祖,光速趋向于

1    cin>>n;
2    while(0<----------n){
3        cout<<n<<" ";
4    }

他们一辈人的志向是成为一名神速力(Speed Force,DC Comics,Flash)趋向于

   cin>>n;
   while(0<--------------------------------------------------n){
       cout<<n<<" ";
   }

哈哈说了这么多原来大家都被我骗了!

趋向于“<--”的第一用法等价于:

   cin>>n;
   n--;
   while(n>0){
       cout<<n<<" ";
       --n;
   }
//哈哈哈哈被骗了吧?

 

 

SECRET_3

(编译器中存在的bug)

我们有代码:

int n=3
cout<<"sizeof(n)="<<sizeof(n++)<<"\n"<<n;

结果居然不是

4

5

而是

4

4

为什么呢?

奇了怪了。

  Edit until 2015.5.30->19:19

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。