C++学习指南笔记
第一章 开始学习 c/c++
第一个程序
///////////////ch01_a1//////////// #include <stdio.h> int main() { printf("hello world! \n"); return 0; }
代码框架
#include <stdio.h> int main() { return 0; }
xp环境下控制台一闪而过的问题
#include <stdio.h> #include <stdlib.h> int main() { printf("hello world! \n"); // 添加按下任意键关闭控制台 system("pause") return 0; }
第二章 控制台输入与输出
2.1 控制台输出
printf("i am qleo \n"); printf("我是谁谁谁 \n");
2.1.1 输出整数
printf("i am %d \n",33);
2.1.2 用变量表示整数
int age = 33 printf("i am %d \n",age);
// 同一行打印两个整数 int a = 10; int b = 50; printf("a: %d,b: %d \n",a,b);
2.1.3 指定显示宽度 %?d 和 %0?d (问号等于宽度值)
// 使用 %4d 来显示数字 printf("number %4d,ok \n",3); printf("number %4d,ok \n",33); printf("number %4d,ok \n",333); // 使用 %04d 来显示数字 printf("number %04d,ok \n",3); printf("number %04d,ok \n",33); printf("number %04d,ok \n",333);
2.1.4 输出小数
// 输出一个小数 printf("x = %lf \n",12.35); // 输出两个小数 printf("x = %lf,y = %lf \n",12.35,90.01);
2.1.5 用变量表示小数
double a = 12.35; printf("x = %lf \n",a);
2.1.6 指定小数点后的位置(%.?lf 问号等于小数后的位数)
double a = 12.35719987; printf("a = %.2lf \n",a);
2.2 控制台输入
可以用 scanf 操作,让用户从控制台输入一个整数或小数。其中,scan 表示输入扫描,f 表示 format,表示接收输入并格式化数据的意思。
2.2.1 输入整数
#include <stdio.h> int main() { int a = 0; scanf("%d",&a); printf("got:%d \n",a); return 0; }
2.2.2 输入小数
#include <stdio.h> int main() { double f = 0; scanf("%lf",&f); printf("got:%lf \n",f); return 0; }
2.2.3 一次输入多个数
#include <stdio.h> int main() { int a; double x; scanf("%d",&a); scanf("%lf",&x); printf("got:%d,%lf \n",a,x); return 0; }
第三章 变量与常量
变量
常量
当在类型名前面加上关键字 const 后,表示它是一个只读的量.这种变量不能修改它的值,因而称为常量.
#include<iostream> int main() { const int max_size = 1024; printf("a : %d \n",max_size); // 读取 const 常量的值 int b = max_size; // 将 max_size 的值赋值给变量 b printf("b:%d \n",b); return 0; }
第四章 数组
数组的定义
char arr[5];
其中 arr 称为"数组变量",简称"数组",它表示5个char型数据 . 把每一个数据称为一个"元素".
数组的基本使用方法
数组的初始值
char arr[5] = {90,91,92,93,94};
访问数组中的元素
#include<stdio.h> int main() { int values[5] = {1,2,3,4,5}; values[0] = 11; // 将第一个元素的值设为11 printf("%d \n",values[0]);// 打印第一个元素的值 return 0; }
用 sizeof 取得数组的大小
int arr[100]; int size = sizeof(arr);// 大小为 100 * 4
第五章 字符与字符数组
5.2 字符的表示
char ch = 65; // 则ch代表的是大写字母 'a' char ch2 = 49; // 则 ch2 代表的是数字 '1' // 显然,如果用 short 或 int 来表示字符就显的大材小用,浪费空间.
5.3 字符的显示
printf("got:%c \n",65);
5.4 字符常量
在 c/c++ 代码中,直接用字符常量来代表一个字符的 ascii码,使用单引号表示.
char ch = 'a';
5.5 字符数组
字符有以下两种初始化方法.
(1) 像普通数组一样初始化
char str[6] = {'h','e','l','l','o','\0'};
(2) 特殊的初始化方法
char str[6] = "hello";
需要注意的是,当用字符数组来存储字符串时,必须以 '\0' 结尾.把 '\0' 称为字符串的结束符.它的 ascii 码数值为 0 .注意, '\0' 和 0 这两种写法是完全等效的.
5.5.1 输出字符串
char str[6] = "hello"; printf("string:%s \n",str);
5.5.2 输入字符串
可以使用 gets 来获取字符串 .
1 #include <stdio.h> 2 int main() 3 { 4 /*用户在控制台输入一个字符串, 5 按回车键结束, 6 所有输入的字符被存储到 buf 数组中 7 */ 8 char buf[128]; 9 gets(buf); 10 printf("got:%s \n",buf); 11 return 0; 12 }
5.5.4 字符串的截断
利用字符串的结束符,可以轻易地截断一个字符串.
char buf[32] = "hello,world"; buf[5] = 0; printf("result:%s \n",buf);
由于 buf[5] 被设置成了结束符,所以字符串 buf 的有小部分就是 "hello" 了.
5.6 转义字符
转义字符
|
意义
|
ascii码值(十进制)
|
\a
|
响铃(bel)
|
007
|
\b
|
退格(bs) ,将当前位置移到前一列
|
008
|
\f
|
换页(ff),将当前位置移到下页开头
|
012
|
\n
|
换行(lf) ,将当前位置移到下一行开头
|
010
|
\r
|
回车(cr) ,将当前位置移到本行开头
|
013
|
\t
|
水平制表(ht) (跳到下一个tab位置)
|
009
|
\v
|
垂直制表(vt)
|
011
|
\\
|
代表一个反斜线字符''\'
|
092
|
\'
|
代表一个单引号(撇号)字符
|
039
|
\"
|
代表一个双引号字符
|
034
|
\? | 代表一个问号 | 063 |
\0
|
空字符(null)
|
000
|
\ddd
|
1到3位八进制数所代表的任意字符
|
三位八进制
|
\xhh
|
1到2位十六进制所代表的任意字符
|
二位十六进制
|
第六章 表达式与操作符
6.1 算术操作符
运算符 | 描述 | 实例 |
+ | 把两个操作数相加 | a + b 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | a - b 将得到 -10 |
* | 把两个操作数相乘 | a * b 将得到 200 |
/ | 分子除以分母 | b / a 将得到 2 |
% | 取模运算符,整除后的余数 | b % a 将得到 0 |
++ | 自增运算符,整数值增加 1 | a++ 将得到 11 |
-- | 自减运算符,整数值减少 1 | a-- 将得到 9 |
6.2 赋值操作符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | c = a + b 将把 a + b 的值赋给 c |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | c += a 相当于 c = c + a |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | c -= a 相当于 c = c - a |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | c *= a 相当于 c = c * a |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | c /= a 相当于 c = c / a |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | c %= a 相当于 c = c % a |
<<= | 左移且赋值运算符 | c <<= 2 等同于 c = c << 2 |
>>= | 右移且赋值运算符 | c >>= 2 等同于 c = c >> 2 |
&= | 按位与且赋值运算符 | c &= 2 等同于 c = c & 2 |
^= | 按位异或且赋值运算符 | c ^= 2 等同于 c = c ^ 2 |
|= | 按位或且赋值运算符 | c |= 2 等同于 c = c | 2 |
6.3 关系表达式
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (a == b) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (a != b) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (a > b) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (a < b) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (a >= b) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (a <= b) 为真。 |
6.5 逻辑表达式
运算符 | 描述 | 实例 |
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (a && b) 为假。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (a || b) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(a && b) 为真。 |
杂项运算符
运算符 | 描述 |
---|---|
sizeof | 返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。 |
condition ? x : y | 。如果 condition 为真 ? 则值为 x : 否则值为 y。 |
, | 会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。 |
.(点)和 ->(箭头) | 用于引用类、结构和共用体的成员。 |
cast | 把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。 |
& | 返回变量的地址。例如 &a; 将给出变量的实际地址。 |
* | 指向一个变量。例如,*var; 将指向变量 var。 |
c++ 中的运算符优先级
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 and | & | 从左到右 |
位异或 xor | ^ | 从左到右 |
位或 or | | | 从左到右 |
逻辑与 and | && | 从左到右 |
逻辑或 or | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
第七章 语句
7.2 if 语句
int x = 61; if(x >= 60) { printf("pass ! \n"); }else { printf("fail ! \n"); }
7.2.3 完全形式 if...else if...else if...else
#include <stdio.h> int main() { int x = 71; if(x >= 90) { printf("got a \n"); }else if(x >= 80) { printf("got b \n"); }else if(x >= 70) { printf("got c \n"); }else if(x >= 60) { printf("got d \n"); }else { printf("got e \n"); } printf("that's over \n"); return 0; }
7.3 switch 语句
#include <stdio.h> int main() { int day = 2; switch(day) { case 1: printf("go to office \n"); break; case 2: printf("go out \n"); break; default: printf("stay at home \n"); } return 0; }
7.4 for 语句
#include <stdio.h> int main() { int a[100]; int i; for (i = 0; i < 100; i++) { a[i] = i + 1; } return 0; }
7.5 while 语句
#include <stdio.h> int main() { int a[100]; int i = 0; // 初始化 while(i < 100) { a[i] = i + 1; i++; // 后置过程 } return 0; }
7.6 do…while 语句
除了 for 语句 、while 语句之外,还有一种 do...while 语句可用于表示循环.其基本形式为:
do { statement; }while(expr);
其中,expr 表达式,statement 是一条但语句或者复合语句.
语法规则:
(1) 执行 statement.
(2) 若 expr 的值为真,则执行 (1) .如 expr 为假,则退出 while 语句.
简而言之:先执行一轮,再检测 expr 的值,如果 expr 为真则接着执行下一轮.如果为假则结束循环.
第八章 函数
8.2 初步认识函数
return_type name(arguments) { body }
其中,
name:函数名.最好起一个有意义的名字.
arguments:参数列表.每个参数以逗号分开,如 int a, int b.
return_typr:返回值类型.
body:函数体.即函数的具体实现.
8.8 函数声明与函数定义
当一个 cpp 文件里有多个函数,且它们之间有调用关系时,那么它们的先后顺序就变得复杂.需要保证,一个函数调用之前,该函数已经被定义.
8.8.1 函数的声明
函数的声明,在形式上就是把函数定义中的函数体去掉,只保留函数名、参数列表、返回值类型,并以分号结束。例如:
int is_alpha(char ch); void print_ascii();
当一个函数被声明后,它就可以被直接调用,而不一定要把函数定义也放在前面。这就解决了函数调用顺序问题。通常把各个函数写在前面,然后函数定义就不需要保证顺序了。
第九章 指针
9.2 指针的概念
#include <stdio.h> int main() { int a = 10; int b = 11; int* p; p = &a; // p 指向变量 a 的地址 p = &b; // 修改 p 的值,现在指向变量 b 的地址 return 0; }
9.3 星号操作
#include <stdio.h> int main() { int a = 10; int b = 11; int* p = &a; // p 指向 a *p = 0xa0a0a0a0; // 写操作:修改 p 指向的内存地址 *p = 0x13141516; // 写操作:修改 p 指向的内存地址 int b = *p; // 读操作:读取 p 指向的内存的值 int c = *p + 2; // 读操作:读取 p 指向的内存的值 return 0; }
9.4 指针与数组
下一篇: 华为机试 合并表记录