文章用于记录我在学习中遇到的问题
java
先说java中的问题,之前我一直对java输出格式有点不清不楚的,现在做一个总结
java的输出 System.out
1.换行输出:System.out.println()
输出内容后会自动换行
//输出数字
System.out.println(123);
//输出字符串
System.out.println("Hello World!");
//输出变量
int a = 20;
System.out.println("数字a:"+a);
//输出表达式结果
System.out.println(10+30); //输出为30
Hello, Java!
123
数字a:20
40
2.不换行输出:System.out.print()
输出内容后不会换行,后续输出会接在同一行。
System.out.print("Hello");
System.out.print(" ");
System.out.print("Java"); // 这三行输出会在同一行
结果:
Hello Java
3.格式化输出:System.out.printf ()
适合需要按指定格式输出的场景(比如保留小数、对齐等),用法和 C 语言的 printf 类似。
String name = "小明";
int age = 18; double score = 98.567;
// 格式化输出:%s=字符串,%d=整数,%.2f=保留2位小数的浮点数
System.out.printf("姓名:%s,年龄:%d,成绩:%.2f\n", name, age, score);
结果:
姓名:小明,年龄:18,成绩:98.57
补充:%zu:格式化占位符,专门用于匹配 sizeof 运算符的返回值类型(size_t 类型,无符号整数)
java的输入
我一直对nextLine()和next()的区别分不清楚,现在给他搞清楚
| 方法 | 作用 | 注意事项 |
|---|---|---|
| nextLine() | 读取整行字符串(含空格) | 推荐读取带空格的字符串 |
| next() | 读取单个字符串(无空格) | 遇到空格 / 回车就停止读取 |
Scanner scanner = new Scanner(System.in);
String a = scanner.nextLine();
String b = scanner.next();
//两个都输入 qwerty qwert
System.out.println(a); //qwerty qwert
System.out.println(b); //qwerty
C语言的结构体
学数据结构回顾结构体的时候才发现有结构体对齐这个知识点,挺难懂的,现在把我理解的整理一下
1.定义
CPU读取内存时,是按照固定内存大小读取的,如4个字节、8个字节。
但如果数据没有对齐,那就有可能要多次读取才能拿到一个完整数据;如一个指针类型数据占8个字节,第一次取可能只取到前4个,后4个要等到下次,造成效率低下。
编译器会自动在结构体成员之间 / 末尾填充空白字节,让每个成员的起始地址满足对齐要求。
2.对齐规则
- 成员自身对齐数:成员类型的大小(如 char=1,short=2,int=4,double=8)
- 结构体整体对齐数:所有成员自身对齐数的最大值(或编译器指定的对齐数,取较小值)
3.实例
结构体大小受变量顺序影响
案例1:未优化顺序的结构体
struct Test1 {
char a; // 1字节,自身对齐数=1
int b; // 4字节,自身对齐数=4
short c; // 2字节,自身对齐数=2
};
int main() {
// 打印结构体大小
printf("Test1的大小:%zu 字节\n", sizeof(struct Test1));
return 0; }
运行结果:Test1的大小:12字节
| 地址偏移 | 0 | 1 2 3 | 4 5 6 7 | 8 9 | 10 11 |
|---|---|---|---|---|---|
| 成员 | a | × × × | b | c | × × |
总大小:1(a)+3(填充)+4(b)+2(c)+2(填充)= 12。
案例 2:优化顺序的结构体(减少填充)
struct Test2 {
char a; // 1字节
short c; // 2字节
int b; // 4字节
};
int main() {
printf("Test2的大小:%zu 字节\n", sizeof(struct Test2));
return 0;
}
运行结果:Test2的大小:8 字节
| 地址偏移 | 0 | 1 | 2 3 | 4 5 6 7 |
|---|---|---|---|---|
| 成员 | a | × | c | b |
a和c刚好能一次取到 总大小:0(a)+1(填充)+2(c)+4(b)= 8