基础 · 02
变量和值
给值起个名字,以后可以再用或修改。
变量就是贴在值上的名牌。
下面的例子把名字和年龄放进变量并输出,然后把年龄加 1 再输出一次。
name = "Lara"age = 10print(name + " " + str(age))age = age + 1print(age)const name = "Lara";let age = 10;console.log(name + " " + age);age = age + 1;console.log(age);const name: string = "Lara";let age: number = 10;console.log(name + " " + age);age = age + 1;console.log(age);public class Main { public static void main(String[] args) { String name = "Lara"; int age = 10; System.out.println(name + " " + age); age = age + 1; System.out.println(age); }}using System; class Program{ static void Main() { string name = "Lara"; int age = 10; Console.WriteLine(name + " " + age); age = age + 1; Console.WriteLine(age); }}#include <iostream>#include <string> int main() { std::string name = "Lara"; int age = 10; std::cout << name << " " << age << '\n'; age = age + 1; std::cout << age << '\n';}#include <stdio.h> int main(void) { const char *name = "Lara"; int age = 10; printf("%s %d\n", name, age); age = age + 1; printf("%d\n", age); return 0;}name = "Lara";age = 10;控制台.输出(name + " " + age);age = age + 1;控制台.输出(age);Lara 10 11
要点
=不是“等于”,而是“把右边的值放进左边的名字里”。
所以age = age + 1是说得通的。- 有的语言在创建变量时要写类型(整数、字符串等);有的语言里值自己知道类型,所以不用写。
- 不会改变的值做成常量。
给常量重新赋值会报错。 - 整数能装的大小有限。
32 位的int最大到2,147,483,647(约 21 亿),更大的数要用 64 位整数(约 9.2×10^18)。
各语言的写法
| Python | age = 10 — 不写类型。没有常量语法,只是约定用 MAX_SCORE 这样的大写名字。整数没有大小限制。 交换用 a, b = b, a |
|---|---|
| JavaScript | let age = 10,常量用 const(重新赋值会在运行时报 TypeError: Assignment to constant variable.)。数字只在 2^53(约 9×10^15)以内精确。 交换用 [a, b] = [b, a],放进文字里用 ${age} |
| TypeScript | let age: number = 10 — 不写类型也会根据值推断。给 const 重新赋值是编译错误。其余和 JavaScript 一样 |
| Java | int 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) |
| C | int age = 10;,字符串是 const char *(或 char 数组)。常量用 const,大数用 long long。交换用临时变量。 文字和数字像 printf("%s %d\n", name, age) 这样放进占位符 |
| Craykon | age = 10; — 不写类型,也没有常量。数字在 2^53 以内精确。 交换用临时变量。 自己 是关键字,不能用作变量名 |
常见错误
用 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# 会用编译错误拦下这种代码。
在块外使用块里第一次创建的变量Craykon
如果 (真) {
y = 1;
}
控制台.输出(y);→ 报错:还没有创建 y 这个名字
在块之前先用 y = 0; 创建。
(Python 在块外也能看到。)
各语言的差异
Python 不能直接用
要用
Python 不能直接用
+ 连接文字和数字("Lara " + 10 → TypeError: can only concatenate str (not "int") to str)。要用
str(age) 转换,或者写 f"{name} {age}"。