C++小笔记
- 格式:doc
- 大小:159.20 KB
- 文档页数:10
第一章概述1.C语言的特点①语言简洁、紧凑,使用方便、灵活。
共有32个关键字,9种控制语句。
②运算符丰富,公有34种运算符。
③数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。
④具有结构化的控制语句(如if…else、while、do…while、switch、for)⑤语法限制不太严格,程序设计自由度大。
⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。
⑦生成目标代码质量高,程序执行效率高。
⑧可移植性好。
2.C语言的用途C虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,C有明显的优势。
现在很多大型应用软件也用C编写。
Top of Page第二章数据类型、运算符与表达式1.C的数据类型C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2.常量与变量常量其值不可改变,符号常量名通常用大写。
变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。
否则为不合法的变量名。
变量在编译时为其分配相应存储单元。
3.整型数据整型常量的表示方法:十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。
整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型。
不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。
4.实型数据实型常量表示形式:十进制形式由数字和小数点组成(必须有小数点),如:0.12、.123、1230.0等。
指数形式如123e3代表123×10的三次方。
实型变量分为单精度(float)和双精度(double)两类。
在一般系统中float型占4字节,7位有效数字,double型占8字节,15~16位有效数字。
5.字符型数据字符变量用单引号括起来,如'a','b'等。
c语言基础知识笔记
1、定义
函数是一组一起执行一个任务的语句,每个C程序都至少有一个函数,即主函数main(),所有简单的程序都可以定义其他额外的函数。
函数声明告诉编译器函数的名称、返回类型和参数,函数定义提供了函数的实际主体。
2、函数的一般形式
return_typefunction_name(parameterlist)
{bodyofthefunction}
组成部分:
1.返回类型
返回类型:一个函数可以返回一个值。
return_type是函数返回的值的数据类型,有些函数执行所需的操作而不返回值,在这种情况下,return_type是关键字void。
2.函数名称
函数名称:这是函数的实际名称。
函数名和参数列表一起构成了函数签名。
注意:函数名和参数列表一起构成了函数签名,意味着可以出现参数列表不同但是函数名相同的函数。
voidprint()
{printf("helloworld!");}
voidprint(intnums)
{printf("%d\n",a);}
3.参数
参数:参数就像是占位符,当函数被调用时,您向参数传递一个值,这个值被称为实际参数。
参数列表包括函数参数的类型、顺序、数量,参数是可选的,也就是说,函数可能不包含参数。
4.函数主体
函数主体:函数主体包含一组定义函数执行任务的语句。
C语言谭浩强版笔记第一章程序设计和C语言1、计算机能直接识别和接受的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。
2、语言的发展历史:①机器语言②符号语言③高级语言3、高级语言的发展:①非结构化语言②结构化语言③面向对象的语言4、C语言的祖先是BCPL语言5、在字符串中的//和/*都不作为注释的开始。
而是作为字符串的一部分。
【但是在vc++6.0中//显示编译错误】6、不要以为在max函数中求出最大值z后就会自动地作为函数值返回调用处,必须用return语句指定将哪个值作为函数值。
也不要不加分析地在所有函数后面都写上return 07、一个程序由一个或多个源程序文件组成8、全局声明:即在函数之外进行的数据声明,在函数外面声明的变量称为全局变量。
例如把int a,b,sum;放到main函数的前面9、函数是C程序的主要组成部分,编写C程序的工作主要就是编写一个个函数10、一个C语言程序是由一个或多个函数组成的,其中必须有且只有一个main函数11、一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中一个为main函数),若程序规模太大,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数【一个源程序文件就是一个程序模块,一个程序分成若干个程序模块】12、在进行编译时是以源程序文件为对象进行的【分别对各源程序文件进行编译得到相应的目标程序,然后再将这些目标程序连接成为一个统一的二进制可执行程序】13、C语言的这种特点使得容易实现程序的模块化14、一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。
如果函数没有参数,可以写void或空括号【如int main(void)或int main()】15、void dump(){}它是一个空函数,但是是合法的16、程序总是从mian函数开始执行的,不管位置在哪儿17、程序中对计算机的操作是由函数中的C语句完成的18、二进制目标程序在visual C++中的后缀为.obj19、可执行程序在visual C++中的后缀为.exe20、一个源程序经过编译后得到的目标程序要经过连接阶段与函数库进行连接才能生成可执行文件21、程序设计的任务:①问题分析②设计算法③编写程序④对源程序进行编辑、编译和连接⑤运行程序,分析结果⑥编写程序文档第二章算法1、对数据的描述:在程序中要指定用到哪些数据类型以及这些数据类型和数据的组织形式,这就是数据结构。
郝斌c语言详细笔记郝斌C语言详细笔记C语言是一门广泛应用于系统编程、嵌入式系统和游戏开发等领域的高级编程语言。
郝斌老师的C语言详细笔记是一份非常优秀的学习资料,它详细介绍了C语言的基础知识和高级应用,对于初学者和进阶者都非常有帮助。
一、基础知识1. 数据类型C语言中的数据类型包括基本数据类型和派生数据类型。
基本数据类型包括整型、浮点型、字符型和布尔型,而派生数据类型包括数组、结构体、共用体和指针等。
在使用数据类型时,需要注意它们的取值范围、精度和存储空间等方面的问题。
2. 运算符C语言中的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符等。
在使用运算符时,需要注意它们的优先级和结合性等方面的问题。
3. 控制语句C语言中的控制语句包括条件语句、循环语句和跳转语句等。
在使用控制语句时,需要注意它们的语法和逻辑结构等方面的问题。
二、高级应用1. 函数函数是C语言中的重要概念,它可以将程序分解为多个模块,提高程序的可读性和可维护性。
在使用函数时,需要注意它们的参数传递、返回值和作用域等方面的问题。
2. 数组和指针数组和指针是C语言中的重要数据结构,它们可以用于处理复杂的数据类型和数据结构。
在使用数组和指针时,需要注意它们的声明、初始化和访问等方面的问题。
3. 文件操作文件操作是C语言中的重要应用之一,它可以用于读写文件、处理文本和二进制数据等。
在使用文件操作时,需要注意文件的打开、关闭和读写等方面的问题。
总之,郝斌老师的C语言详细笔记是一份非常优秀的学习资料,它涵盖了C语言的基础知识和高级应用,对于初学者和进阶者都非常有帮助。
在学习C语言时,我们需要认真阅读笔记中的内容,理解其原理和应用,同时还需要进行实践和练习,以提高自己的编程能力。
数组笔记在程序设计中,把具有相同类型的若干变量按有序的形式组织起来。
这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
1.一维数组的定义和引用1.一维数组的定义方式在C语言中使用数组必须先进行定义。
一维数组的定义方式为:类型说明符数组名[常量表达式];其中:类型说明符是任一种基本数据类型或构造数据类型。
数组名是用户定义的数组标识符。
方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:int a[10]; 说明整型数组a,有10 个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch有20 个元素。
对于数组类型说明应注意以下几点:1)数组的类型实际上是指数组元素的取值类型。
对于同一个数组,其所有元素的数据类型都是相同的。
2)数组名的书写规则应遵循标识符命名规则。
3)数组名不能与其它变量名相同。
例如:main(){int a; float a[10];……}是错误的。
4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。
但是其下标从0 开始计算。
因此5 个元素分别为a[0],a[1],a[2],a[3],a[4]。
5)常量表达式中可以包括常量和符号常量,不能用变量来表示元素的个数,也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如:#define FD 5 main(){int a[3+2],b[7+FD];……}是合法的。
但是下述说明方式是错误的。
main(){int n=5; int a[n];……}6)允许在同一个类型说明中,说明多个数组和多个变量。
c语言重点笔记C语言重点笔记一、基础语法1.注释:用于解释代码,不会被编译器执行。
单行注释以“//”开头,多行注释用“/* */”包围。
2.变量:用于存储数据。
定义变量时需要指定类型和名称,如int num;赋值时使用等号,如num=10;也可以在定义时进行赋值,如int num=10;3.数据类型:C语言提供了基本的数据类型,包括整型、浮点型、字符型等。
4.运算符:C语言提供了各种运算符,包括算术运算符、关系运算符、逻辑运算符等。
5.控制语句:C语言提供了各种控制语句,包括条件语句、循环语句等。
二、函数1.函数定义:函数是一段可重复使用的代码块。
定义函数需要指定返回值类型、函数名和参数列表。
如int add(int a, int b) { return a + b; }2.函数调用:调用函数时需要使用函数名和参数列表,并根据返回值类型进行接收。
如int result = add(1, 2);3.递归函数:递归是一种特殊的函数调用方式,在函数内部调用自身。
需要注意避免死循环。
三、数组1.数组定义:数组是一组相同类型的数据。
定义数组时需要指定类型和长度,如int arr[5];2.数组初始化:可以在定义时进行初始化,如int arr[5] = {1, 2, 3, 4, 5};3.数组访问:使用下标访问数组元素,下标从0开始,如arr[0]表示数组的第一个元素。
4.多维数组:多维数组是由一维数组组成的。
二维数组可以看作是一个矩阵,定义时需要指定行数和列数。
四、指针1.指针定义:指针是一个变量,用于存储另一个变量的地址。
定义指针时需要指定类型和名称,如int *p;2.指针运算:可以对指针进行加减运算,表示移动指针位置。
3.指针与数组:可以使用指针访问数组元素,如int *p = arr; p[0]表示arr[0]。
4.空指针:空指针是没有被初始化的指针。
五、结构体1.结构体定义:结构体是一种自定义数据类型,可以包含多个不同类型的成员变量。
1. c 语言1.1.1.helloworld文件名:test_pointer.c文件内容:#include <stdio.h>#include <malloc.h>int main(){printf("hello world\n\n");return 0;}编译加运行:[root@localhost c_study]# gcc test_pointer.c ;./a.outhello world1.1.2.获取键盘输入文件名:getKeyboardInptStr.c文件内容:#include <stdio.h>#include <malloc.h> int main(){char *a= malloc(sizeof(char *));char *b= malloc(sizeof(char *));scanf("%s",a);scanf("%s",b);printf("%s \t%s\n",a,b);free(a);free(b);return 0;}编译:gcc getKeyboardInptStr.c -o hello.exe运行[root@localhost tcp_ip]# ./hello.exe abcdddabc ddd[root@localhost tcp_ip]#1.1.2.1.从键盘输入构造数组文件名keyboard_input.c文件内容:#include <stdio.h>#include <malloc.h>int main(){char * strs[4];char *a;int i;for(i=0;i<4;i++){a= malloc(sizeof(char *));scanf("%s",a);strs[i]=a;//printf("%s \t\n",a);//free(a);}printf("=====================================\n");for(i=0;i<4;i++){printf("%s \t\n",strs[i]);}return 0;}1.1.3.读取文件读取文件有两个操作:打开流(fopen)和关闭流(fclose)#include <stdio.h>#include <stdlib.h>#include <malloc.h>int main(int ac,char**av){int exit_status=EXIT_SUCCESS;FILE *input;while( *++av!=NULL){input=fopen(*av,"r");if(input==NULL){perror(*av);exit_status=EXIT_FAILURE;continue;}if(fclose(input)!=0){perror("fclose");exit(EXIT_FAILURE);}}return exit_status;}1.1.3.1.打开文件流1.1.3.1.1.ungetc 用法文件名:ungetc_test.c文件内容:#include<stdio.h>#include<ctype.h>int main(){int value;int ch;value=0;while((ch=getchar())!=EOF && isdigit(ch)){value=value*10;value+=ch-'0';}//ungetc(ch,stdin);printf("%d\n",value);ch=getchar();printf("last char is %c\n",ch);return value;}若注释掉红色部分:[root@localhost read_file]# gcc ungetc_test.c;echo 234abc|./a.out 234last char is b否则:[root@localhost read_file]# gcc ungetc_test.c;echo 234abc|./a.out 234last char is a1.1.3.2.关闭流1.1.3.3.读取文本文件文件名称:read_file03.c文件内容:#include <stdio.h>#include <stdlib.h>#include <malloc.h>int main(){int value;int ch;char *input_file="ab.txt";FILE *input;input=fopen(input_file,"r");while((ch=fgetc(input))!=EOF){printf("%c",ch);}return 0;}1.2.指针1.2.1.取地址和取值取地址:&取值:*1.2.1.1.取地址int age=23;int *age_adrr=&age;1.2.1.2.取值参阅取地址。
翁凯c语言笔记
翁凯是一位热爱编程的学生,他在学习C语言的过程中积累了很多宝贵的经验和知识。
下面是他的一些C语言学习笔记,希望对大家有所帮助。
1. 基础语法:C语言是一种结构化的编程语言,具有丰富的数据类型和运算符。
翁凯通过学习基础语法,掌握了变量的声明和赋值、控制语句、循环语句等基本概念。
2. 函数与模块化编程:C语言通过函数的调用来实现模块化编程,提高了代码的可读性和可维护性。
翁凯学会了如何定义和调用函数,并且学习了递归函数的使用。
3. 数组与指针:在C语言中,数组和指针是非常重要的概念。
翁凯弄清楚了数组和指针之间的关系,并学会了如何使用它们进行内存管理和数据操作。
4. 结构体与文件操作:C语言中的结构体可以用来存储不同类型的数据,翁凯学会了如何定义和使用结构体,并且掌握了文件的读写操作,可以将结构体数据保存到文件中。
5. 动态内存分配:C语言提供了动态内存分配的功能,翁凯学会了
使用malloc()和free()函数来进行内存管理,避免了内存泄漏和内存溢出的问题。
6. 编程技巧与调试:除了学习语法和基本概念,翁凯还注重培养编程技巧和调试能力。
他学会了使用调试工具和技巧,解决程序中的bug,并且善于利用注释、缩进和命名规范来提高代码的可读性。
翁凯通过不断学习和实践,逐渐掌握了C语言的基本知识和技巧。
他深知编程需要不断练习和积累,因此他坚持每天都进行编程练习,并且参与了一些开源项目,与其他开发者交流经验。
翁凯相信,只有不断学习和实践,才能成为一名优秀的C语言程序员。
C学习笔记一C语言和汇编语言的区别C语言和汇编语言是计算机编程中常见的两种语言,它们在编写程序时有着不同的特点和用途。
本文将从语法、可读性、抽象程度以及机器依赖性等方面对C语言和汇编语言进行比较,以帮助读者更好地理解它们之间的区别。
1. 语法差异C语言是一种高级编程语言,它采用类似英语的结构化语法,具有丰富的语法特性,包括变量、数组、条件语句、循环语句和函数等。
C语言的语法相对简洁,能够快速实现一些功能。
而汇编语言是一种低级编程语言,使用各种助记符和符号来表示机器指令、寄存器和内存访问等,需要编写者有较强的硬件知识和技巧。
相比C语言,汇编语言更接近计算机底层,更加底层、精简和直接。
2. 可读性和可维护性C语言的语法结构和语义更加接近自然语言,代码具有较好的可读性和可维护性。
由于C语言的抽象程度较高,程序员可以更快速地理解代码,并进行修改和维护。
同时,C语言具有模块化的特点,程序可以按模块进行组织,便于团队协作开发。
相比之下,汇编语言的语法和符号较为晦涩,阅读和理解汇编代码需要具备较深的计算机体系结构和指令集的知识。
汇编语言编写的程序通常较为底层,代码行数相对较多,可读性和可维护性较差,需要更高的技术水平和耐心。
3. 抽象程度C语言是一种高级语言,提供了丰富的语法特性和抽象层次,为程序员提供了更方便和高效的编程方式。
C语言可以在不同的计算机平台上进行移植,并且可以通过调用库函数实现复杂的操作,具备良好的抽象能力。
汇编语言是一种低级语言,提供了直接操作硬件的能力。
汇编程序员可以直接访问寄存器、内存等底层资源,实现对计算机的精细控制。
汇编语言相对于C语言来说更接近机器语言,具有更高的执行效率和更大的灵活性。
4. 机器依赖性C语言是一种面向过程的编程语言,编写的程序相对独立于具体的硬件平台,具有较好的可移植性。
通过编译器的编译,C语言可以在不同的操作系统和计算机上运行。
汇编语言则直接操作底层的机器指令和寄存器,与具体的硬件平台密切相关,不同的计算机架构和操作系统可能需要不同的汇编代码。
Escape code Description\n newline //例如:cout<<a<<'\n';\r carriage return\t tab\v vertical tab\b backspace\f form feed (page feed)\a alert (beep)\' single quote (')\" double quote (")\? question mark (?)\\ backslash (\)int a=5; // initial value: 5int b(3); // initial value: 3int c{2}; // initial value: 2int foo = 0;auto bar = foo; // the same as: int bar = foo;int foo = 0;decltype(foo) bar; // the same as: int bar;// my first string#include <iostream>#include <string>using namespace std;int main (){string mystring;mystring = "This is a string";cout << mystring;return 0;}输出结果:This is a stringstring mystring = "This is a string";string mystring ("This is a string");string mystring {"This is a string"};Strings can also perform all the other basic operations that fundamental data types can, like being declared without an initial value and change its value during execution:// my first string#include <iostream>#include <string>using namespace std;int main (){string mystring;mystring = "This is the initial string content";cout << mystring << endl;mystring = "This is a different string content";cout << mystring << endl;return 0;}This is the initial string contentThis is a different string content75 // decimal0113 // octal (base 8)0x4b // hexadecimal (base 16)\7 // octal (base 8)\x20 // hexadecimal (base 16)x = "string expressed in \two lines" //换行连接符等于x = "string expressed in two lines"Three keyword literals exist in C++: true, false and nullptr:true and false are the two possible values for variables of type bool. nullptr is the null pointer value.bool foo = true;bool bar = false;int* p = nullptr;#include <iostream>using namespace std;const double pi = 3.14159;const char newline = '\n';int main (){double r=5.0; // radiusdouble circle;circle = 2 * pi * r;cout << circle;cout << newline;}输出结果:31.4159#define identifier replacement#include <iostream>using namespace std;#define PI 3.14159#define NEWLINE '\n'int main (){double r=5.0; // radiusdouble circle;circle = 2 * PI * r;cout << circle;cout << NEWLINE;}输出结果:31.4159y = 2 + (x = 5);等于x = 5;y = 2 + x;price *= units + 1;等于price = price * (units+1);Example 1 Example 2x = 3; x = 3;y = ++x; y = x++;// x contains 4, y contains 4 // x contains 4, y contains 3In Example 1, the value assigned to y is the value of x after being increased. While in Example 2, it is the value x had before being increased.&& OPERATOR (and)a b a && btrue true truetrue false falsefalse true falsefalse false false|| OPERATOR (or)a b a || btrue true truetrue false truefalse true truefalse false falseoperator short-circuit&& if the left-hand side expression is false, the combined result is false (the right-hand side expression is never evaluated).|| if the left-hand side expression is true, the combined result is true (the right-hand side expression is never evaluated).This is mostly important when the right-hand expression has side effects, such as altering values: if ( (i<10) && (++i<n) ) { /*...*/ } // note that the condition increments iHere, the combined conditional expression would increase i by one, but only if the condition on the left of && is true, because otherwise, the condition on the right-hand side (++i<n) is never evaluated.condition ? result1 : result2If condition is true, the entire expression evaluates to result1, and otherwise to result2.For example, the following code:a = (b=3, b+2);would first assign the value 3 to b, and then assign b+2 to variable a. So, at the end, variable a would contain the value 5 while variable b would contain value 3.operator asm equivalent description& AND Bitwise AND| OR Bitwise inclusive OR^ XOR Bitwise exclusive OR~ NOT Unary complement (bit inversion)<< SHL Shift bits left>> SHR Shift bits right强制类型转换int i;float f = 3.14;i = (int) f;输出结果:i=3;x = sizeof (char);Here, x is assigned the value 1, because char is a type with a size of one byte.From greatest to smallest priority, C++ operators are evaluated in the following order:// more pointers#include <iostream>using namespace std;int main (){int firstvalue = 5, secondvalue = 15;int * p1, * p2;p1 = &firstvalue; // p1 = address of firstvaluep2 = &secondvalue; // p2 = address of secondvalue*p1 = 10; // value pointed to by p1 = 10*p2 = *p1; // value pointed to by p2 = value pointed by p1 p1 = p2; // p1 = p2 (value of pointer is copied)*p1 = 20; // value pointed by p1 = 20cout << "firstvalue is " << firstvalue << '\n';cout << "secondvalue is " << secondvalue << '\n';return 0;}输出结果:firstvalue is 10secondvalue is 20// more pointers#include <iostream>using namespace std; int main (){int numbers[5];int * p;p = numbers;*p = 10;p++; *p = 20;p = &numbers[2];*p = 30;p = numbers + 3;*p = 40;p = numbers;*(p+4) = 50;for (int n=0; n<5; n++)cout << numbers[n] << ", ";return 0;}输出结果:10, 20, 30, 40, 50,int myvar;int * myptr = &myvar;等价于int myvar;int *myptr;myptr =&myvar;不等于int myvar;int *myptr;*myptr =&myvar;进一步理解int myvar;int *foo = &myvar;int *bar = foo;++mychar;++myshort;++mylong;*p++ // same as *(p++): increment pointer, and dereference unincremented address*++p // same as *(++p): increment pointer, and dereference incremented address++*p // same as ++(*p): dereference pointer, and increment the value it points to(*p)++ // dereference pointer, and post-increment the value it points to*p++ = *q++;It would be roughly equivalent to:*p =*q;++p;++q;int x;int y = 10;const int * p = &y;x = *p; // ok: reading p*p = x;// error: modifying p, which is const-qualified// pointers as arguments:#include <iostream>using namespace std;void increment_all (int * start, int * stop) {int * current = start;while (current != stop) {++(*current); // increment value pointed ++current; // increment pointer}}void print_all (const int * start, const int * stop) {const int * current = start;while (current != stop) {cout << *current << '\n';++current; // increment pointer}}int main (){int numbers[] = {10,20,30};increment_all (numbers,numbers+3);print_all (numbers,numbers+3);return 0;}输出结果:112131chara; char * b; char ** c; a = 'z'; b = &a; c= &b;c is of type char** and a value of 8092*c is of type char* and a value of 7230 **c is of type char and a value of 'z'。