C/C++
C语言学习笔记
EdVzAs
写下自己的学习笔记
展开
-
C语言练习 汉诺塔
1.原始版:#include <stdio.h>void move(int i,char f,char t) { printf("move %d from %c to %c\n",i,f,t);}void hanoi(int n,char f,char v,char t) { if (n==1) { move(1,f,t); } else { hanoi(n-1,f,t,v); move(n,f,t); hanoi(n-1,v,f,t); }}int m原创 2021-04-24 21:31:35 · 98 阅读 · 0 评论 -
C++面向对象 类与对象
一.类1.概念:C++在C的基础上增加了对面向对象编程的支持:"类"是C++的核心特性,通常称为"用户定义的类型".类用于指定对象的形式,其中包含了表示/处理数据的方法.类中的数据/方法(如函数)称为"类的成员"二.对象...原创 2020-12-21 17:35:29 · 112 阅读 · 0 评论 -
C++扩展 函数
1.函数的分文件编写:可以将函数定义在头文件(后缀为.h)中,然后进行文件包含(参见 C语言细节.预处理器.三 部分)或编译多源码文件(参见 C语言细节.多源码文件程序的编译,命令行参数,退出程序 部分)2.函数的默认参数(1)语法:<type> <func>([<type1> <param1>,<type2> <param2>...<typei> <parami>=<val1>...])原创 2020-12-20 16:45:35 · 490 阅读 · 1 评论 -
C++扩展 引用
一.概念1个引用就是某个变量或对象的别名.对引用的操作与对其所绑定的变量或对象的操作等价二.语法1.创建引用:<type> &<ref>=<var>; //注意:<ref>的数据类型(即<type>)和<var>的数据类型必须相同 //该声明可读作:<ref>是1个被初始化为<var>的<type>类型的引用 //参数说明: type:<ref>和&l原创 2020-12-18 23:01:49 · 229 阅读 · 1 评论 -
C++扩展 动态内存分配
一.语法1.动态分配内存:动态分配1块内存空间:[<type> * <p>=]new <type>(<val>); //参数说明: type:<val>的数据类型 val:内存空间中存储的值 p:指向这块内存空间的指针变量//实例:#include <iostream>using namespace std;int* f() { int* p = new int(10); return p原创 2020-12-18 19:52:52 · 920 阅读 · 1 评论 -
C++扩展 常用命令与数据类型
1.C++程序的基本框架:#include <iostream>using namespace std;int main() { cout << "hello world" << endl;//输出hello world到屏幕 system("pause"); return 0;}//结果:hello world2.注释:同C语言,即单行注释用//... 多行注释用/*...*/3.标识符命名规则:同C语言(参见 C语言基原创 2020-12-05 16:27:28 · 474 阅读 · 0 评论 -
C语言细节 一些常用代码
1.读取指定组数据://方法1:#include <stdio.h>int main(void) { int t,i; scanf("%d",&t); fflush(stdin); for (i=0;i<t;i++) {//或while (t--) {} printf("input:"); scanf("..."); fflush(stdin); } return 0;}//方法2:#include <stdio.h>原创 2020-12-12 21:21:23 · 142 阅读 · 0 评论 -
C语言细节 内存分区模型
C++程序在运行时,会将内存划分为4个区域:①②③④原创 2020-12-08 19:32:51 · 191 阅读 · 1 评论 -
C语言细节 预处理器
一.明示常量:#define二.文件包含:#include三.其他指令原创 2020-11-17 22:32:46 · 257 阅读 · 0 评论 -
C语言细节 位操作
一.进制,位,字节二.C语言位运算符三.位字段四.对齐特性原创 2020-11-11 13:03:02 · 161 阅读 · 0 评论 -
C语言细节 其他数据类型
一.联合二.枚举三.typedef原创 2020-11-05 15:03:49 · 102 阅读 · 0 评论 -
C语言细节 结构体
一.结构体原创 2020-10-31 15:28:44 · 375 阅读 · 0 评论 -
C语言细节 文件的输入与输出
一.相关概念1.文件:"文件"(File)通常是在外存(光盘/磁带/机械硬盘/固态硬盘...)上的1段已命名的存储区.对用户而言,stdio.h就是1个文件,其中包含了一些信息.但对操作系统而言,文件更复杂一些,如大型文件会被分开存储或包含一些额外的数据以确定其文件类型.不过,这些都由操作系统管理,通常用户无需关心C把文件看成是一系列连续的字节,每个字节都能被单独读取,这与UNIX环境中的文件结构相对应.由于在其他环境中可能无法完全对应该模型,C提供2种文件模式:①"文本模式" ②"二进制模式原创 2020-10-24 00:32:54 · 453 阅读 · 0 评论 -
C语言细节 存储类别与内存管理
一.存储类别1.作用域2.链接二.内存管理三.ANSI C类型限定符原创 2020-09-30 23:45:51 · 3000 阅读 · 0 评论 -
C语言细节 字符串
一.表示字符串与字符串I/O1.表示字符串:字符串是以空字符('\0')结尾的char类型数组//实例:char words[20]="Hello World!";2.输出字符串:puts(<str>); //会自动在结尾加上换行符 //参数说明: str:要输出的字符串//实例:char words[20]="Hello World!";puts(words);//结果:Hello World!puts("Hello World!");//结果:Hel原创 2020-08-29 00:15:26 · 319 阅读 · 0 评论 -
C语言细节 指针
1.指针的值:指针的值是其指向的对象的内存地址;内存地址的表示方式取决于计算机硬件,通常是"按字节编址",即对内存中的每个字节按顺序编号.并且如果1个对象占用多个字节,其地址通常是其占有的第1个字节的地址指针每+1,其指向的内存地址的增加量等于其指向的类型的大小,如:int a[5]={1,2,3,4,5};printf("%d,%d\n",a,a+1);//6487552,6487556//指针+1,地址增加了4,因为指向的类型int占用4B...原创 2020-08-26 07:47:16 · 176 阅读 · 0 评论 -
C语言细节 数组
1.初始化的项数与数组大小不匹配:不完全初始化(即初始化列表中的元素过少)参见 C语言基础.数组.二.2 部分若初始化列表中的元素过多,会发出警告int main(void) { int days[5]={1,2,3,4,5,6}; return 0;}//警告:[Warning] excess elements in array initializer[Warning] (near initialization for 'days')/////////////////////原创 2020-08-25 14:55:30 · 817 阅读 · 0 评论 -
C语言细节 多源码文件程序的编译与命令行参数
1.UNIX:假设安装了编译器cc#注意:最初的编译器cc已停用,但UNIX通常将cc用作其他编译器命令(如gcc/clang)的别名假设有file1.c和file2.c这2个文件,要将其编译并生成1个可执行文件a.out: cc file1.c file2.c另外还生成2个名为file1.o,file2.o的目标文件如果之后改动了file1.c,而file2.c不变,可以使用以下命令编译file1.c并与file2.o合并:原创 2020-08-25 14:11:04 · 650 阅读 · 0 评论 -
C语言基础 递归
1.概念C语言允许函数调用自身,这种调用称为"递归"(Recursion)可以使用循环的地方都可以使用递归,应根据实际情况选取更好的方案递归的方案更简洁,但在效率上比循环低首次调用某个函数称为"第1级递归",该函数调用自身称为"第2级递归",在第2级递归中在调用自身称为"第3级递归",以此类推.即在第n级递归中调用自身称为"第n+1级递归"//实例:#include <stdio.h>void uad(int n);int main(void) { uad(1);原创 2020-08-24 17:25:19 · 320 阅读 · 0 评论 -
C语言细节 字符输入/输出
1…缓冲区(1)无缓冲输入与缓冲输入:1.无缓冲输入:如果正在等待的程序可以立即使用输入的字符,称为无缓冲输入(或直接输入)2.缓冲输入:如果输入的字符先被收集并存储在1个称为缓冲区(Buffer)的临时存储区按下Enter键后正在等待的程序才能使用输入的字符,称为缓冲输入如以下程序:#include <stdio.h>int main(void) { char ch; while ((ch=getchar())!='#') { putcha原创 2020-08-20 20:52:09 · 246 阅读 · 0 评论 -
C语言基础 库函数
1.math.h中(1)sqrt():求x的平方根:double sqrt(double x);//实例:printf("%lf\n",sqrt(5.43));//结果:2.330236(2)abs()与fabs():求int x的绝对值:int abs(int x);//实例:printf("%d\n",abs(22));//结果:22printf("%d\n",abs(-5.43));//结果:5////////////////////////////////////////原创 2020-08-19 14:55:49 · 933 阅读 · 0 评论 -
C语言细节 函数
1.关于函数的前置声明(Forward Declaration):前置声明告诉编译器函数定义在别处,并说明返回类型及参数(有些标准允许不声明参数)如果函数定义在使用后,必须加前置声明;如果函数定义在使用前,可以不加前置声明但后1种不是C语言的标准风格;main()通常只提供程序的框架,最好放在所有函数定义的前面此外,通常把函数定义放在另1个文件中,这时需要include该文件...原创 2020-08-19 13:43:45 · 333 阅读 · 0 评论 -
C语言细节 流程控制
1.真值的问题://C语言对真值的约束很少,这可能带来一些问题#include <stdio.h>int main(void) { long num,sum=0L; int status; printf("enter an integer to be summed(q to quit):"); status=scanf("%ld",&num); while (status=1) { sum+=num; printf("enter next integer原创 2020-08-18 00:16:24 · 320 阅读 · 0 评论 -
C语言细节 运算符,表达式,语句
1.术语://数据对象(Data Object):用于存储值的数据存储区域统称数据对象//左值(Lvalue):用于标识或定位特定数据对象的名称或表达式称为"左值"对早期的C语言,"左值"意味着:①它指定1个对象,可以引用内存地址 ②用在赋值运算符(=)的左边后来新增了const限定符,这么创建的变量不能用在赋值运算符左边因此删除了标准②,增加了"可修改的左值"(Modifiable Lvalue)这个术语当前标准建议使用术语"对象定位值"(Object Locator Value)而不是原创 2020-08-15 15:32:21 · 262 阅读 · 0 评论 -
C语言细节 字符串与格式化输入输出
一.格式化输出(printf())1.何时发送内容到屏幕:printf()会先把要输出的内容发送到1个叫缓冲区(Buffer)的中间存储区域,然后缓冲区中的内容再不断被发送到屏幕上从缓冲区把数据发送到屏幕或文件称为刷新缓冲区,C标准规定:当缓冲区被填满,遇到'\n'或需要输入时刷新缓冲区旧式编译器遇到scanf()也不会强行刷新缓冲区,程序会停在那里不显示任何提示内容,等待用户输入数据在这种情况下,可以使用'\n'来刷新缓冲区,但这会导致光标移动到下1行起始位置;还可以用fflush()刷新缓冲区原创 2020-08-12 15:09:45 · 288 阅读 · 0 评论 -
C语言细节 数据
1.位(Bit),字节(Byte),字(Word):位/字节/字是描述计算机数据单元或存储单元的术语最小的存储单元是位,可以存储1个2进制数(即0或1),是计算机内存的基本构建块字节是常用的计算机存储单位;1字节等于8位,这是字节的标定义(但C语言对此有不同的定义)8位字节可以表示256个状态,如0~255的整数或256个不同的字符字是设计计算机时给定的自然存储单位;计算机的字长越大,数据转移越快,允许的内存访问也更多对于8位的微型计算机,1个字长只有8位,之后,个人计算机字长增长到16位原创 2020-08-12 00:19:51 · 339 阅读 · 0 评论 -
C语言细节 编程机制
用C语言编写程序时,编写的内容被存储在文本文件中,该文件被称为源代码文件(Source Code File)在大部分环境中,源代码文件名都应是<filename>.c的格式,其中<filename>是基本名,c是扩展名一.目标代码文件,可执行文件和库C编程的基本策略是:用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码)典型的C实现是通过编译和链接这2个步骤来完成这一过程的编译器把源代码转换成中间代码;链接器把中间代码和其他代码合并,生成可执行文件(通常原创 2020-08-11 21:07:23 · 292 阅读 · 0 评论 -
C语言基础 结构体
一.简单介绍1.为什么需要结构体:用于表示一些基本类型数据无法表示的复杂事物该事物的不同特征需要不同类型的基本类型数据来描述需要通过结构体把这些特征放到1个变量里,从而形成关联2.什么是结构体:把一些基本数据类型组合在一起形成的1种复合数据类型可以说,结构体是一系列自定义数据类型的统称这些自定义数据类型都是通过基本数据类型组合而来二.定义结构体1.方法1(推荐)://定义1个结构体:这里没有定义1个变量,而是定义了1个数据类型struct <struct_name>原创 2020-08-02 17:30:12 · 156 阅读 · 0 评论 -
C语言基础 动态内存分配
一.为什么需要动态内存分配1.传统数组的缺点2.动态内存分配的优点二.原创 2020-07-31 00:12:52 · 166 阅读 · 0 评论 -
C语言基础 指针
一.指针的介绍1.指针的重要性:指针是C语言的灵魂,是指针让C语言高效/强大/危险:①表示一些复杂的数据结构②快速传递数据,减少内存消耗③使函数可以返回1个以上的值④能直接访问硬件⑤能方便地处理str⑥是面向对象语言中引用的基础2.指针的概念(1)内存地址:内存地址就是内存单元的编号(2)指针:指针就是内存地址二.指针的分类...原创 2020-07-23 16:53:47 · 343 阅读 · 0 评论 -
C语言基础 常用命令,运算符,控制符
1.输出:printf(<content>):进行格式化的输出(到屏幕) #参数说明: content:要输出的内容2.运算:+:加法-:减法*:乘法/:除法=:赋值3.要求输入:scanf("<form>",&<var>):进行格式化的输入 //如果输入的内容的格式不合法,var的值仍为原来的值 //参数说明: form:输入的内容的格式;为str var:将输入的内容赋值给该变量//实例:int原创 2020-07-02 21:19:31 · 1968 阅读 · 0 评论 -
C语言基础 函数
一.函数介绍1.为什么需要函数:①解决了重复代码的问题②有利于程序的模块化2.概念:逻辑上:能完成特定功能的独立代码块叫函数,可以看成1个黑匣子形式上:能接收数据,能对接收的数据进行处理,能将处理数据得到的结果返回(也有可能不包含某几项)3.如何定义1个函数:<type> <func>([<param1>,<param2>...]) { <command1>; ... [return <re原创 2020-07-21 22:11:01 · 364 阅读 · 0 评论 -
C语言基础 数组
一.为什么需要数组1.解决大量同类型数据的存储/命名/使用问题2.模拟现实世界:如1维数组可以模拟1条直线,2维数组可以模拟1个平面二.1维数组1.如何定义1个1维数组:<type> <avar>[<n>]={<a1>...<an>}; //会为这n个变量分配连续的存储空间 //参数说明: type:数组中元素的数据类型 avar:数组的名字 n:数组中元素的个数 a:数组中的各个元素原创 2020-07-19 21:01:10 · 432 阅读 · 0 评论 -
C语言基础 流程控制
一.流程控制1.概念:流程控制就是指程序代码执行的顺序2.流程控制的分类:①顺序执行:从上往下执行,如果不使用流程控制语句,默认就是顺序执行②选择执行:有选择地执行某些代码,不执行另一些代码,又称分支结构③循环执行:反复执行某些代码...原创 2020-07-10 18:05:05 · 707 阅读 · 0 评论 -
C语言基础 数据类型,变量,常量
一.基本数据类型1.整数:用于储存整数,分为:1.短整型(short int):占用2B2.整型(int):占用4B3.长整型(long int):占用8B2.浮点数:用于储存小数,分为:1.单精度浮点数(float):占用4B2.双精度浮点数(double):占用8B3.字符:字符(char):用于储存单个字符,占用1B#注意:C语言中没有可以直接存储多个字符的数据类型,需要通过字符数组来完成该功能二.复合数据类型1.结构体:2.枚举:3.共用体:三.变量1.什原创 2020-07-01 21:16:57 · 771 阅读 · 0 评论 -
C语言基础 介绍
一.C的历史编程语言的发展过程:第1代语言 机器语言 ↓第2代语言 汇编语言 ↓第3代语言 高级语言——结构化:C,Fortran,Basic,Pascal ↓分界线:1980s 面向对象(OO):Algo,Simula67,Ada,SmallTalk原创 2020-06-30 20:57:28 · 221 阅读 · 0 评论