{ }codelper

学习 › Craykon

基础 · 02

变量和值

给值起个名字,以后可以再用或修改。

变量就是贴在值上的名牌。
下面的例子把名字和年龄放进变量并输出,然后把年龄加 1 再输出一次。

name = "Lara";age = 10;控制台.输出(name + " " + age);age = age + 1;控制台.输出(age);
stdout
Lara 10
11

要点

  • = 不是“等于”,而是“把右边的值放进左边的名字里”。
    所以 age = age + 1 是说得通的。
  • 有的语言在创建变量时要写类型(整数、字符串等);有的语言里值自己知道类型,所以不用写。
  • 不会改变的值做成常量。
    给常量重新赋值会报错。
  • 整数能装的大小有限。
    32 位的 int 最大到 2,147,483,647(约 21 亿),更大的数要用 64 位整数(约 9.2×10^18)。

各语言的写法

Pythonage = 10 — 不写类型。
没有常量语法,只是约定用 MAX_SCORE 这样的大写名字。
整数没有大小限制。
交换用 a, b = b, a
JavaScriptlet age = 10,常量用 const(重新赋值会在运行时报 TypeError: Assignment to constant variable.)。
数字只在 2^53(约 9×10^15)以内精确。
交换用 [a, b] = [b, a],放进文字里用 ${age}
TypeScriptlet age: number = 10 — 不写类型也会根据值推断。
给 const 重新赋值是编译错误。
其余和 JavaScript 一样
Javaint age = 10;,字符串是 String,也可以用 var 让编译器推断。
常量用 final,大数用 long。
交换用临时变量
C#int age = 10;,字符串是 string,也可以用 var。
常量用 const,大数用 long。
交换用 (a, b) = (b, a),放进文字里用 $"{age}"
C++int age = 10;,字符串是 std::string,也可以用 auto 推断。
常量用 const,大数用 long long。
交换用 std::swap(a, b)
Cint age = 10;,字符串是 const char *(或 char 数组)。
常量用 const,大数用 long long。
交换用临时变量。
文字和数字像 printf("%s %d\n", name, age) 这样放进占位符
Craykonage = 10; — 不写类型,也没有常量。
数字在 2^53 以内精确。
交换用临时变量。
自己 是关键字,不能用作变量名

常见错误

在块外使用块里第一次创建的变量Craykon

如果 (真) {
    y = 1;
}
控制台.输出(y);

→ 报错:还没有创建 y 这个名字

在块之前先用 y = 0; 创建。
(Python 在块外也能看到。)

用 a = b; b = a; 交换

a = 1; b = 2;
a = b;
b = a;

→ a 和 b 都是 2,因为第一行就把 a 原来的值丢掉了

用临时变量:t = a; a = b; b = t;

没给初始值就开始累加C · C++

int total;
total += 5;
printf("%d\n", total);

→ 从内存里的随机值(垃圾值)开始,和就错了

像 int total = 0; 这样给初始值。
Java 和 C# 会用编译错误拦下这种代码。

各语言的差异
Python 不能直接用 + 连接文字和数字("Lara " + 10 → TypeError: can only concatenate str (not "int") to str)。
要用 str(age) 转换,或者写 f"{name} {age}"。

练习题