![]() |
1
10
如果你想选演员,那就选:
|
![]() |
2
5
它是未定义的行为,因此在某种意义上,对于这个函数调用,每个可能的行为都可以称为“正常”。不过,这是可以解释的。
|
![]() |
3
5
没有C/C++这样的东西,你的代码只是两者的混合。特别是它没有用标准的C编译器编译,因为您缺少
供您使用
然后将结构作为参数放入
|
![]() |
4
4
您在堆栈上放置了三个整数,然后检索了三个整数(每%d一个)。是的,这很正常,但在“真的 丑陋的 hack”(和未定义的引导行为,正如plinth正确评论的那样)。 |
![]() |
5
3
这是偶然的。大多数时候
如果你想要C++使用
如果需要非脆性C代码,请使用:
|
![]() |
6
2
|
![]() |
7
2
printf的行为有很多依赖于编译器/环境的东西。 printf表面上使用了C的var args特性,当您有一个声明时
重要的是——这里有很多与编译器/环境相关的东西。例如,结构可能已打包,以便每个值都显示在32位边界上,以及如何从编译器实际确定va_列表。我认为编译器到编译器可能会有一些与您的代码非常不同的行为,但是展示您描述的行为并不完全令人惊讶。 |
![]() |
8
1
printf()有“(char*,…)”签名。这意味着由“printf”函数处理“char*”之后的所有参数。 将结构a传递给printf()。内存中有如下布局:“int,int,int”。函数的作用是:读取格式字符串(“%d%d%d”),并“认为”您传递了3个整数给它。这个“假设”与结构的布局一致。因此它将所有字段打印为单独的值。 尝试删除“b”字段,您将看到printf()将打印“a”字段、“c”字段和 分段故障 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |