联合体
code
/* 联合体学习.cpp */
#include <iostream>
using namespace std;
// 定义一个联合体 myun
// 联合体内的所有成员共享同一块内存区域
union myun {
// 联合体的第一个成员是一个结构体
struct {
int x; // 结构体中的第一个整型成员
int y; // 结构体中的第二个整型成员
int z; // 结构体中的第三个整型成员
} u;
int k; // 联合体的第二个成员是一个整型
} a;
int main() {
a.u.x = 4; // 给结构体中的 x 成员赋值 4
a.u.y = 5; // 给结构体中的 y 成员赋值 5
a.u.z = 6; // 给结构体中的 z 成员赋值 6
a.k = 0; // 赋值给整型成员 k,这会覆盖掉结构体中的 x、y、z 的值,因为它们与 k 共享同一块内存
// 打印输出:结构体成员 x、y、z 和整型成员 k 的值
printf("%d %d %d %d\n", a.u.x, a.u.y, a.u.z, a.k);
return 0;
}
解释
在这个程序中,输出结果 0 5 6 0 反映了联合体的内存共享特性。具体来说:
a.u.x 的值为 0,这是因为 a.k 被赋值 0,它覆盖了 a.u.x 所在的内存位置。
a.u.y 和 a.u.z 的值依然为 5 和 6,这些值是之前赋的值。
由于 a.k 和 a.u 共享内存,赋值给 a.k 会影响到 a.u.x,而不会影响 a.u.y 和 a.u.z。这表明 a.u.x 和 a.k 占用的是相同的内存位置,而 a.u.y 和 a.u.z 占用的是不同的内存位置。
打印
code
/* 打印练习.cpp */
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
int i, j, k, f;
// 打印上半部分的菱形
for (i = 1; i <= 4; i++) {
// 打印空格,使菱形居中
for (j = 1; j <= 30; j++)
cout << " ";
// 打印左侧的空格
for (k = 1; k <= 8 - 2 * i; k++)
cout << " ";
// 打印星号
for (f = 1; f <= 2 * i; f++)
cout << '*';
// 换行
cout << endl;
}
// 打印下半部分的菱形
for (i = 1; i <= 3; i++) {
// 打印空格,使菱形居中
for (j = 1; j <= 30; j++)
cout << " ";
// 打印星号
for (f = 1; f <= 7 - 2 * i; f++)
cout << '*';
// 换行
cout << endl;
}
return 0;
}
解释
这个程序输出一个对称的菱形图案。程序分为两个部分:
上半部分的菱形:打印一个顶部宽度逐渐增加的菱形。
下半部分的菱形:打印一个底部宽度逐渐减小的菱形。
注释
/* 注释.cpp */
#include <iostream>
// 另一种注释方法
#if 0
asd
#endif
// 这段代码使用条件编译指令来注释掉一部分代码。
// `#if 0` 和 `#endif` 之间的代码将不会被编译,因为条件为 0(假)。
// 打开注释
// 条件编译指令
#if 1
// `#if 1` 和 `#endif` 之间的代码将被编译,因为条件为 1(真)。
#endif
计算
code
/* 是否闰年.cpp */
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
int year; // 存储输入的年份
bool isLeapYear; // 用于表示该年份是否为闰年
// 提示用户输入年份
cout << "Enter the year: ";
cin >> year; // 读取用户输入的年份
// 判断是否为闰年
isLeapYear = (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
// 如果年份能被4整除但不能被100整除,或者能被400整除,则是闰年
// 根据判断结果输出是否为闰年的信息
if (isLeapYear) {
cout << year << " is a leap year" << endl; // 输出闰年信息
} else {
cout << year << " is not a leap year" << endl; // 输出非闰年信息
}
return 0; // 返回0,表示程序正常结束
}