查看: 302|回复: 3

[交流] 盘点C/C++中合法但很奇怪的行为

[复制链接]

0

技术

0

魅力

0

原创

初出茅庐

Rank: 2

积分
191
人气
0
分享
0
发表于 2023-4-4 18:40:14 | 显示全部楼层 |阅读模式
本帖最后由 liu12073 于 2023-4-5 16:05 编辑

1.+++++
[C++] 纯文本查看 复制代码
a+++-++a

虽然看起来很奇怪,但是根据大嘴法原则,这个的正确解析为:
[C++] 纯文本查看 复制代码
(a++)+(-(++a))

不同的编译器会有不同的结果,写这个的人估计非常冲明!
2.指向自己的指针
[C++] 纯文本查看 复制代码
int *a = a;

这是合法的,读到 int *a 就已经为 a 开辟空间了,结果后面来一个 = a,但编译器不知情,就只能强行赋值了
只不过,这个值恒为 0,也就是 (void*)0
3.指向自己的void指针
[C++] 纯文本查看 复制代码
void *a = *a;

众所周知,void* 通吃所有类型,包括 void*,void***,void************************!
于是,我们可以对 a,进行 n 次的解引用,就像这样:
[C++] 纯文本查看 复制代码
#include <stdio.h>
int main() {
        void* a = &a;
        printf("%d", *********************************************************************************************************************((int*********************************************************************************************************************)a));
}

得出来是一个随机无意义的数字
4.Main递归
[C++] 纯文本查看 复制代码
#include <stdio.h>
int main() {
        main();
}

栈里面本没有溢出,递归的次数多了,也便溢出了.....
虽然合法,编译通过,但,这操作有点……
不过在 debug 程序的时候,你想输入多组数据,又不想改代码,也不想一直输入./a.out(或按f10),加一个 main(),就能输入多组数据啦?

5. 0个元素的数组
[C++] 纯文本查看 复制代码
#include <bits/stdc++.h>
using namespace std;


int main() {
        int a[0][114514][2147483647];
        printf("%d", sizeof(a));
}

这个 a 有什么用?第一维是 0,后面一切都空谈好吧!
sizeof(a) = 0,这比什么都没有的结构体更废,好吧!
更离谱的是:
[C++] 纯文本查看 复制代码
#include <bits/stdc++.h>
using namespace std;


int main() {
        int a[0];
        printf("%d %d", sizeof(a), sizeof(a[0]));
}
sizeof(a[0]) = 4, 大于 sizeof(a)!!!

妈妈,救命啊,数组元素比数组都要大了呀~



评分

参与人数 1经验 +6 收起 理由
YFSafe + 6 赞一个!

查看全部评分

2

技术

13

魅力

3

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
4471
人气
169
分享
31

最佳新人活跃会员

发表于 2023-4-8 22:31:09 | 显示全部楼层
很不错
@蒟蒻 评价一下
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com

0

技术

0

魅力

0

原创

初出茅庐

Rank: 2

积分
191
人气
0
分享
0
 楼主| 发表于 2023-4-9 08:27:57 | 显示全部楼层
YFSafe 发表于 2023-4-8 22:31
很不错
@蒟蒻 评价一下

谢谢评分

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
5908
人气
156
分享
52

最佳新人活跃会员

发表于 2023-4-9 18:57:26 | 显示全部楼层
YFSafe 发表于 2023-4-8 22:31
很不错
@蒟蒻 评价一下

我不懂,我什么都不懂
这种蜜汁行为没用过
你干嘛~哎哟
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表