专业律所网站建设,ipv6 网站开发,h5小程序开发多少钱一天,郑州网站维护C 学习_基础知识
一直想学习 C 这门编程语言#xff0c;但感觉 C 总是没学牢靠一拖再拖#xff0c;这几天根据网上教程#xff0c;准备快速过下 C 基本语法。
对于我来说#xff0c;直接看文档自学#xff0c;往往比看视频效率高些#xff0c;相信有了 C 基础#xff…C 学习_基础知识一直想学习 C 这门编程语言但感觉 C 总是没学牢靠一拖再拖这几天根据网上教程准备快速过下 C 基本语法。对于我来说直接看文档自学往往比看视频效率高些相信有了 C 基础C 的学习应该会轻松些。一、C 教程#include iostream // iostream 输入输出流 头文件 using namespace std; // C 命名空间 int main() { cout Hello World! endl; // cout 输出语句 endl 换行 可以用 \n 代替 cout Hello World! \n; return 0; } //易错endl 中最后一个是字母小写L // 输出 // Hello World! // Hello World!关于 C 命名空间说明在c中名称name可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大名称互相冲突性的可能性越大。另外使用多个厂商的类库时也可能导致名称冲突。为了避免在大规模程序的设计中以及在程序员使用各种各样的C库时这些标识符的命名发生冲突标准C引入关键字namespace命名空间/名字空间/名称空间可以更好地控制标识符的[作用域]。命名空间的使用代码示例如下//定义一个名字为A的命名空间变量、函数 namespace A { int a 100; } namespace B { int a 200; } void test02() { //A::a a是属于A中 coutA中a A::aendl;//100 coutB中a B::aendl;//200 }既然是初学就暂时不要深入探讨了后来再慢慢补上。二、C 简介C 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言支持过程化编程、面向对象编程和泛型编程。C 被认为是一种中级语言它综合了高级语言和低级语言的特点。C 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言最初命名为带类的C后来在 1983 年更名为 C。C 是 C 的一个超集事实上任何合法的 C 程序都是合法的 C 程序。**注意**使用静态类型的编程语言是在编译时执行类型检查而不是在运行时执行类型检查。1、面向对象程序设计C 完全支持面向对象的程序设计包括面向对象开发的四大特性封装Encapsulation封装是将数据和方法组合在一起对外部隐藏实现细节只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。继承Inheritance继承是从已有类中派生出新类新类具有已有类的属性和方法并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。多态Polymorphism多态是指同一种操作作用于不同的对象可以有不同的解释和实现。它可以通过接口或继承实现可以提高代码的灵活性和可读性。抽象Abstraction抽象是从具体的实例中提取共同的特征形成抽象类或接口以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑而不必关注底层的实现细节。2、标准库标准的 C 由三个重要部分组成核心语言提供了所有构件块包括变量、数据类型和常量等等。C 标准库提供了大量的函数用于操作文件、字符串等。标准模板库STL提供了大量的方法用于操作数据结构等。3、ANSI 标准ANSI 标准是为了确保 C 的便携性 —— 您所编写的代码在 Mac、UNIX、Windows、Alpha 计算机上都能通过编译。由于 ANSI 标准已稳定使用了很长的时间所有主要的 C 编译器的制造商都支持 ANSI 标准。4、学习 C学习 C关键是要理解概念而不应过于深究语言的技术细节。学习程序设计语言的目的是为了成为一个更好的程序员也就是说是为了能更有效率地设计和实现新系统以及维护旧系统。C 支持多种编程风格。您可以使用 Fortran、C、Smalltalk 等任意一种语言的编程风格来编写代码。每种风格都能有效地保证运行时间效率和空间效率。5、C 的使用C 语言在许多行业和领域都有广泛应用包括游戏开发C 是游戏开发领域中最常用的编程语言之一因为它具有高效的性能和直接控制硬件的能力。许多主要的游戏引擎如 Unreal Engine 和 Unity都使用 C 编写。嵌入式系统开发C 可以在嵌入式系统中发挥重要作用如智能手机、汽车、机器人和家电等领域。由于嵌入式系统通常具有严格的资源限制和实时要求因此 C 的高效性能和内存控制功能非常有用。金融领域C 在金融领域中被广泛应用如高频交易、算法交易和风险管理等领域。由于这些应用程序需要高效的性能和对硬件的直接控制C 语言是一个合适的选择。图形图像处理C 可以用于开发图形和图像处理应用程序如计算机视觉、计算机图形学和人工智能领域。由于这些应用程序需要高效的计算能力和对硬件的控制因此 C 是一个很好的选择。科学计算和数值分析C 可以用于开发科学计算和数值分析应用程序如数值模拟和高性能计算等领域。由于这些应用程序需要高效的计算能力和对硬件的直接控制C 语言是一个很好的选择。三、C 基本语法C 程序可以定义为对象的集合这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象方法、即时变量。对象 -对象具有状态和行为。例如一只狗的状态 - 颜色、名称、品种行为 - 摇动、叫唤、吃。对象是类的实例。类 -类可以定义为描述对象行为/状态的模板/蓝图。方法 -从基本上说一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。即时变量 -每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。1、C 程序结构让我们看一段简单的代码可以输出单词Hello World。#include iostream using namespace std; // main() 是程序开始执行的地方 int main() { cout Hello World; // 输出 Hello World return 0; } // 输出 // Hello World接下来我们讲解一下上面这段程序C 语言定义了一些头文件这些头文件包含了程序中必需的或有用的信息。上面这段程序中包含了头文件 。下一行using namespace std;告诉编译器使用 std 命名空间。命名空间是 C 中一个相对新的概念。下一行// main() 是程序开始执行的地方是一个单行注释。单行注释以 // 开头在行末结束。下一行int main()是主函数程序从这里开始执行。下一行cout “Hello World”;会在屏幕上显示消息 “Hello World”。下一行return 0;终止 main( )函数并向调用进程返回值 0。2、C 注释程序的注释是解释性语句您可以在 C 代码中包含注释这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。C 支持单行注释和多行注释。注释中的所有字符会被 C 编译器忽略。C 注释一般有两种//- 一般用于单行注释。/*** … */** - 一般用于多行注释。注释以//开始直到行末为止。这部分内容和 C 语言一样。四、C 数据类型使用编程语言进行编程时需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着当您创建一个变量时就会在内存中保留一些空间。您可能需要存储各种数据类型比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等的信息操作系统会根据变量的数据类型来分配内存和决定在保留内存中存储什么。1、基本的内置类型C 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C 数据类型类型关键字布尔型bool字符型char整型int浮点型float双浮点型double无类型void宽字符型wchar_t其实 wchar_t 是这样来的typedef short int wchar_t;所以 wchar_t 实际上的空间是和 short int 一样。一些基本类型可以使用一个或多个类型修饰符进行修饰修饰符描述示例signed表示有符号类型默认signed int x -10;unsigned表示无符号类型unsigned int y 10;short表示短整型short int z 100;long表示长整型long int a 100000;const表示常量值不可修改const int b 5;volatile表示变量可能被意外修改禁止编译器优化volatile int c 10;mutable表示类成员可以在const对象中修改mutable int counter;下表显示了各种变量类型在内存中存储值时需要占用的内存以及该类型的变量所能存储的最大值和最小值。**注意**不同系统会有所差异一字节为 8 位。**注意**默认情况下int、short、long都是带符号的即 signed。**注意**long int 8 个字节int 都是 4 个字节早期的 C 编译器定义了 long int 占用 4 个字节int 占用 2 个字节新版的 C/C 标准兼容了早期的这一设定。数据类型描述大小字节范围/取值示例bool布尔类型表示真或假1true或falsechar字符类型通常用于存储 ASCII 字符1-128 到 127 或 0 到 255signed char有符号字符类型1-128 到 127unsigned char无符号字符类型10 到 255wchar_t宽字符类型用于存储 Unicode 字符2 或 4取决于平台char16_t16 位 Unicode 字符类型C11 引入20 到 65,535char32_t32 位 Unicode 字符类型C11 引入40 到 4,294,967,295short短整型2-32,768 到 32,767unsigned short无符号短整型20 到 65,535int整型4-2,147,483,648 到 2,147,483,647unsigned int无符号整型40 到 4,294,967,295long长整型4 或 8取决于平台unsigned long无符号长整型4 或 8取决于平台long long长长整型C11 引入8-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807unsigned long long无符号长长整型C11 引入80 到 18,446,744,073,709,551,615float单精度浮点数4约 ±3.4e±386-7 位有效数字double双精度浮点数8约 ±1.7e±30815 位有效数字long double扩展精度浮点数8、12 或 16取决于平台2、C11 新增类型数据类型描述示例auto自动类型推断auto x 10;decltype获取表达式的类型decltype(x) y 20;nullptr空指针常量int* ptr nullptr;std::initializer_list初始化列表类型std::initializer_listint list {1, 2, 3};std::tuple元组类型可以存储多个不同类型的值std::tupleint, float, char t(1, 2.0, a);注意各种类型的存储大小与系统位数有关但目前通用的以64位系统为主。以下列出了32位系统与64位系统的存储大小的差别windows 相同从上表可得知变量的大小会根据编译器和所使用的电脑而有所不同。下面实例会输出您电脑上各种数据类型的大小。#include iostream #include limits using namespace std; int main() { cout type:\t\t ********size********* endl; cout bool:\t\t 所占字节数 sizeof(bool); cout \t最大值 (numeric_limitsbool::max)(); cout \t\t最小值 (numeric_limitsbool::min)() endl; cout char:\t\t 所占字节数 sizeof(char); cout \t最大值 (numeric_limitschar::max)(); cout \t\t最小值 (numeric_limitschar::min)() endl; cout signed char:\t\t 所占字节数 sizeof(signed char); cout \t最大值 (numeric_limitssigned char::max)(); cout \t\t最小值 (numeric_limitssigned char::min)() endl; cout wchar_t:\t\t 所占字节数 sizeof(wchar_t); cout \t最大值 (numeric_limitswchar_t::max)(); cout \t\t最小值 (numeric_limitswchar_t::min)() endl; cout short:\t\t 所占字节数 sizeof(short); cout \t最大值 (numeric_limitsshort::max)(); cout \t\t最小值 (numeric_limitsshort::min)() endl; cout short:\t\t 所占字节数 sizeof(int); cout \t最大值 (numeric_limitsint::max)(); cout \t\t最小值 (numeric_limitsint::min)() endl; cout unsigned:\t\t 所占字节数 sizeof(unsigned); cout \t最大值 (numeric_limitsunsigned::max)(); cout \t\t最小值 (numeric_limitsunsigned::min)() endl; cout long:\t\t 所占字节数 sizeof(long); cout \t最大值 (numeric_limitslong::max)(); cout \t\t最小值 (numeric_limitslong::min)() endl; cout unsigned long:\t\t 所占字节数 sizeof(unsigned long); cout \t最大值 (numeric_limitsunsigned long::max)(); cout \t\t最小值 (numeric_limitsunsigned long::min)() endl; cout double:\t\t 所占字节数 sizeof(double); cout \t最大值 (numeric_limitsdouble::max)(); cout \t\t最小值 (numeric_limitsdouble::min)() endl; cout long double:\t\t 所占字节数 sizeof(long double); cout \t最大值 (numeric_limitslong double::max)(); cout \t\t最小值 (numeric_limitslong double::min)() endl; cout float:\t\t 所占字节数 sizeof(float); cout \t最大值 (numeric_limitsfloat::max)(); cout \t\t最小值 (numeric_limitsfloat::min)() endl; cout size_t:\t\t 所占字节数 sizeof(size_t); cout \t最大值 (numeric_limitssize_t::max)(); cout \t\t最小值 (numeric_limitssize_t::min)() endl; cout string:\t\t 所占字节数 sizeof(string); cout \t最大值 (numeric_limitsstring::max)(); cout \t\t最小值 (numeric_limitsstring::min)() endl; cout type:\t\t ********size********* endl; return 0; } // :: 相当于 的3、派生数据类型数据类型描述示例数组相同类型元素的集合int arr[5] {1, 2, 3, 4, 5};指针存储变量内存地址的类型int* ptr x;引用变量的别名int ref x;函数函数类型表示函数的签名int func(int a, int b);结构体用户定义的数据类型可以包含多个不同类型的成员struct Point { int x; int y; };类用户定义的数据类型支持封装、继承和多态class MyClass { ... };联合体多个成员共享同一块内存union Data { int i; float f; };枚举用户定义的整数常量集合enum Color { RED, GREEN, BLUE };4、类型别名别名描述示例typedef为现有类型定义别名typedef int MyInt;using为现有类型定义别名C11 引入using MyInt int;5、标准库类型数据类型描述示例std::string字符串类型std::string s Hello;std::vector动态数组std::vectorint v {1, 2, 3};std::array固定大小数组C11 引入std::arrayint, 3 a {1, 2, 3};std::pair存储两个值的容器std::pairint, float p(1, 2.0);std::map键值对容器std::mapint, std::string m;std::set唯一值集合std::setint s {1, 2, 3};6、typedef 声明您可以使用typedef为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法typedef type newname;例如下面的语句会告诉编译器feet 是 int 的另一个名称typedef int feet;现在下面的声明是完全合法的它创建了一个整型变量 distancefeet distance;7、枚举类型枚举类型(enumeration)是C中的一种派生数据类型它是由用户定义的若干枚举常量的集合。如果一个变量只有几种可能的值可以定义为枚举(enumeration)类型。所谓枚举是指将变量的值一一列举出来变量的值只能在列举出来的值的范围内。创建枚举需要使用关键字enum。枚举类型的一般形式为enum 枚举名{ 标识符[整型常数], 标识符[整型常数], ... 标识符[整型常数] } 枚举变量;如果枚举没有初始化, 即省掉整型常数时, 则从第一个标识符开始。例如下面的代码定义了一个颜色枚举变量 c 的类型为 color。最后c 被赋值为 “blue”。enum color { red, green, blue } c; c blue;默认情况下第一个名称的值为 0第二个名称的值为 1第三个名称的值为 2以此类推。但是您也可以给名称赋予一个特殊的值只需要添加一个初始值即可。例如在下面的枚举中green的值为 5。enum color { red, green5, blue };在这里blue的值为 6因为默认情况下每个名称都会比它前面一个名称大 1但 red 的值依然为 0。8、类型转换类型转换是将一个数据类型的值转换为另一种数据类型的值。C 中有四种类型转换静态转换、动态转换、常量转换和重新解释转换。1静态转换静态转换是将一种数据类型的值强制转换为另一种数据类型的值。静态转换通常用于比较类型相似的对象之间的转换例如将 int 类型转换为 float 类型。静态转换不进行任何运行时类型检查因此可能会导致运行时错误。int i 10; float f static_castfloat(i); // 静态将int类型转换为float类型2动态转换暂且跳过动态转换dynamic_cast是 C 中用于在继承层次结构中进行向下转换downcasting的一种机制。动态转换通常用于将一个基类指针或引用转换为派生类指针或引用。动态转换在运行时进行类型检查。如果转换失败对于指针类型会返回 nullptr对于引用类型则会抛出 std::bad_cast 异常。dynamic_cast目标类型(表达式)目标类型必须是指针或引用类型。表达式需要转换的基类指针或引用。3常量转换常量转换用于将 const 类型的对象转换为非 const 类型的对象。常量转换只能用于转换掉 const 属性不能改变对象的类型。const int i 10; int r const_castint(i); // 常量转换将const int转换为int五、实训编写计算器程序// 学习文档注释示例如下 /** * brief 计算两个整数的和。 * * param a [in] 第一个整数。 * param b [in] 第二个整数。 * return 返回两个整数的和。 * * author wiro * date 2025/12/15 */ // 包含输入输出流头文件用于 cout (输出) 和 cin (输入) #include iostream // 用于处理可能的输入错误 (可选但更健壮) #include limits // 函数声明 定义加法减法乘法除法函数 double add(double a,double b); double subtract(double a,double b); double multiply(double a,double b); double divide(double a,double b); int main() { // 定义变量存储两个操作数和运算符 double num1,num2,result; char op; // 标记是否继续计算 char continueFlag y; // 循环实现多次计算 while (continueFlag y || continueFlag Y) { // 这个程序没在前面定义命名空间所以要加上 std:: // std::cout 意思是 标准的输出 // 提示用户输入 std::cout 简易计算器 std::endl; std::cout 请输入第一个数字; std::cin num1; // 输入 num1 数值 // 检查输入是否合法比如输入非数字的情况 if (std::cin.fail()) { std::cout 输入错误请输入有效数字。 std::endl; // 清除输入错误状态 std::cin.clear(); // 忽略缓冲区中的无效字符 std::cin.ignore(std::numeric_limitsstd::streamsize::max(),\n); continue; } std::cout 请输入运算符(、-、*、/):; std::cin op; std::cout 请输入第二个数字; std::cin num2; // 检查输入是否合法比如输入非数字的情况 if (std::cin.fail()) { std::cout 输入错误请输入有效数字。 std::endl; // 清除输入错误状态 std::cin.clear(); // 忽略缓冲区中的无效字符 std::cin.ignore(std::numeric_limitsstd::streamsize::max(),\n); continue; } // 条件判断根据运算符选择对应的计算函数 switch (op) { case : result add(num1,num2); std::cout num1 num2 result std::endl; break; case -: result subtract(num1,num2); std::cout num1 - num2 result std::endl; break; case *: result multiply(num1,num2); std::cout num1 * num2 result std::endl; break; case /: // 除法特殊处理除数不能为 0 if (num2 0) { std::cout 错误除数不能为 0 ! std::endl; } else { result divide(num1,num2); std::cout num1 / num2 result std::endl; } break; default: std::cout 错误: 无效的运算符! std::endl; break; } // 询问是否继续计算 std::cout 是否继续计算?(y/n):; std::cin continueFlag; // 清空换行符避免影响下一次输入 std::cin.ignore(std::numeric_limitsstd::streamsize::max(), \n); std::cout ------------------------ std::endl; } std::cout 计算器已退出感谢使用! std::endl; return 0; } // 函数定义加法 double add(double a,double b) { return a b; } // 函数定义减法 double subtract(double a,double b) { return a - b; } // 函数定义乘法 double multiply(double a,double b) { return a * b; } // 函数定义除法 double divide(double a,double b) { return a / b; }六、C 变量类型变量其实只不过是程序可操作的存储区的名称。在 C 中有多种变量类型可用于存储不同种类的数据。C 中每个变量都有指定的类型类型决定了变量存储的大小和布局该范围内的值都可以存储在内存中运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的因为 C 是大小写敏感的。基于前一章讲解的基本类型有以下几种基本的变量类型将在下一章中进行讲解类型描述bool布尔类型存储值 true 或 false占用 1 个字节。char字符类型用于存储 ASCII 字符通常占用 1 个字节。int整数类型通常用于存储普通整数通常占用 4 个字节。float单精度浮点值用于存储单精度浮点数。单精度是这样的格式1 位符号8 位指数23 位小数通常占用4个字节。double双精度浮点值用于存储双精度浮点数。双精度是 1 位符号11 位指数52 位小数通常占用 8 个字节。void表示类型的缺失。wchar_t宽字符类型用于存储更大范围的字符通常占用 2 个或 4 个字节。C 也允许定义各种其他类型的变量比如枚举、指针、数组、引用、数据结构、类等等这将会在后续的章节中进行讲解。整数类型Integer Typesint用于表示整数通常占用4个字节。short用于表示短整数通常占用2个字节。long用于表示长整数通常占用4个字节。long long用于表示更长的整数通常占用8个字节。浮点类型Floating-Point Typesfloat用于表示单精度浮点数通常占用4个字节。double用于表示双精度浮点数通常占用8个字节。long double用于表示更高精度的浮点数占用字节数可以根据实现而变化。字符类型Character Typeschar用于表示字符通常占用1个字节。wchar_t用于表示宽字符通常占用2或4个字节。char16_t用于表示16位Unicode字符占用2个字节。char32_t用于表示32位Unicode字符占用4个字节。布尔类型Boolean Typebool用于表示布尔值只能取true或false。枚举类型Enumeration Typesenum用于定义一组命名的整数常量。指针类型Pointer Typestype*用于表示指向类型为type的对象的指针。数组类型Array Typestype[]或type[size]用于表示具有相同类型的元素组成的数组。结构体类型Structure Typesstruct用于定义包含多个不同类型成员的结构。类类型Class Typesclass用于定义具有属性和方法的自定义类型。共用体类型Union Typesunion用于定义一种特殊的数据类型它可以在相同的内存位置存储不同的数据类型。在 C 中类型的长度即占用的字节数取决于编译器和计算机架构然而C 标准规定了不同整数类型的最小范围而不是具体的字节数这是为了确保代码在不同的系统上都能正确运行。请注意以上类型的范围只是 C 标准规定的最小要求实际上许多系统上这些类型可能占用更多的字节例如很多现代计算机上 int 通常占用 4 字节而 long 可能占用 8 字节。下面我们将讲解如何定义、声明和使用各种类型的变量。1、C 中的变量定义变量定义就是告诉编译器在何处创建变量的存储以及如何创建变量的存储。变量定义指定一个数据类型并包含了该类型的一个或多个变量的列表如下所示type variable_list;在这里type必须是一个有效的 C 数据类型可以是 char、wchar_t、int、float、double、bool 或任何用户自定义的对象variable_list可以由一个或多个标识符名称组成多个标识符之间用逗号分隔。下面列出几个有效的声明int i, j, k; char c, ch; float f, salary; double d;行int i, j, k;声明并定义了变量 i、j 和 k这指示编译器创建类型为 int 的名为 i、j、k 的变量。变量可以在声明的时候被初始化指定一个初始值。初始化器由一个等号后跟一个常量表达式组成如下所示type variable_name value;下面列举几个实例extern int d 3, f 5; // d 和 f 的声明 int d 3, f 5; // 定义并初始化 d 和 f byte z 22; // 定义并初始化 z char x x; // 变量 x 的值为 x不带初始化的定义带有静态存储持续时间的变量会被隐式初始化为 NULL所有字节的值都是 0其他所有变量的初始值是未定义的。2、C 中的变量声明变量声明向编译器保证变量以给定的类型和名称存在这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义在程序连接时编译器需要实际的变量声明。当您使用多个文件且只在其中一个文件中定义变量时定义变量的文件在程序连接时是可用的变量声明就显得非常有用。您可以使用extern关键字在任何地方声明一个变量。虽然您可以在 C 程序中多次声明一个变量但变量只能在某个文件、函数或代码块中被定义一次。尝试下面的实例其中变量在头部就已经被声明但它们是在主函数内被定义和初始化的#include iostream using namespace std; // 声明变量 extern int a,b; extern int c; extern float f; int main() { // 变量定义 int a,b; int c; float f; // 实际初始化 a 10; b 20; c a b; cout f endl; f 70.0 / 3.0; cout f endl; return 0; } // 输出 // -5.09463e-35 // 23.3333同样的在函数声明时提供一个函数名而函数的实际定义则可以在任何地方进行。例如// 函数声明 int func(); int main() { // 函数调用 int i func(); } // 函数定义 int func() { return 0; }3、C 中的左值和右值C 中有两种类型的表达式**左值lvalue**指向内存位置的表达式被称为左值lvalue表达式。左值可以出现在赋值号的左边或右边。**右值rvalue**术语右值rvalue指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式也就是说右值可以出现在赋值号的右边但不能出现在赋值号的左边。变量是左值因此可以出现在赋值号的左边。数值型的字面值是右值因此不能被赋值不能出现在赋值号的左边。下面是一个有效的语句int g 20;但是下面这个就不是一个有效的语句会生成编译时错误10 20;七、C 变量作用域一般来说有三个地方可以定义变量在函数或一个代码块内部声明的变量称为局部变量。在函数参数的定义中声明的变量称为形式参数。在所有函数外部声明的变量称为全局变量。作用域是程序的一个区域变量的作用域可以分为以下几种局部作用域在函数内部声明的变量具有局部作用域它们只能在函数内部访问。局部变量在函数每次被调用时被创建在函数执行完后被销毁。全局作用域在所有函数和代码块之外声明的变量具有全局作用域它们可以被程序中的任何函数访问。全局变量在程序开始时被创建在程序结束时被销毁。块作用域在代码块内部声明的变量具有块作用域它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建在代码块执行完后被销毁。类作用域在类内部声明的变量具有类作用域它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。**注意**如果在内部作用域中声明的变量与外部作用域中的变量同名则内部作用域中的变量将覆盖外部作用域中的变量。1、局部变量在函数或一个代码块内部声明的变量称为局部变量。它们只能被函数内部或者代码块内部的语句使用。下面的实例使用了局部变量#include iostream using namespace std; int main() { // 局部变量声明 int a,b; int c; // 实际初始化 a 10; b 20; c a b; cout c; return 0; } // 输出 // 302、全局变量在所有函数外部定义的变量通常是在程序的头部称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。全局变量可以被任何函数访问。也就是说全局变量一旦声明在整个程序中都是可用的。下面的实例使用了全局变量和局部变量#include iostream using namespace std; // 全局变量声明 int g; int main() { // 局部变量声明 int a,b; // 实际初始化 a 10; b 20; g a b; cout g; return 0; } // 输出 // 30在程序中局部变量和全局变量的名称可以相同但是在函数内局部变量的值会覆盖全局变量的值。下面是一个实例#include iostream using namespace std; // 全局变量声明 int g 20; int main() { // 局部变量声明 int g 10; cout g; return 0; } // 输出 // 103、初始化局部变量和全局变量当局部变量被定义时系统不会对其初始化您必须自行对其初始化。定义全局变量时系统会自动初始化为下列值数据类型初始化默认值int0char‘\0’float0double0pointerNULL正确地初始化变量是一个良好的编程习惯否则有时候程序可能会产生意想不到的结果。块作用域指的是在代码块内部声明的变量#include iostream int main() { int a 10; { int a 20; // 块作用域变量 std::cout 块变量 a std::endl; } std::cout 外部变量 a std::endl; return 0; } // 输出 // 块变量20 // 外部变量104、类作用域类作用域指的是在类内部声明的变量#include iostream class MyClass { public: static int class_var; // 类作用域变量 }; int MyClass::class_var 30; int main() { std::cout 类变量 MyClass::class_var std::endl; return 0; } // 输出 // 类变量30以上实例中MyClass 类中声明了一个名为 class_var 的类作用域变量。可以使用类名和作用域解析运算符::来访问这个变量。在 main() 函数中访问 class_var 时输出的是 30。写在最后只能说 C 大部分语法结构 和 C 高度相似有了 C 基础这些学的很快。补个视频地址不懂的看视频第一章-05_变量的特征_哔哩哔哩_bilibili