【C++】入门篇

C++ 入门篇

P5.变量及其作用域

两个重要概念

  • 生存期:什么时候分配内存,什么时候释放内存
  • 作用域:在什么位置可见,什么位置不可见

全局变量

局部变量:函数内部定义,函数执行时存在

变量赋值

大括号作用域
编程习惯:尽量缩小变量的作用域

P6.常数与常量

  • 常数–也叫立即数

    • 字符常量
    • 整型常数
    • 浮点型常数
  • 常量–用const修饰的变量,它占用数据区内存,但编译器保证你不能修改它的值

    • 多个地方用到同一个常量,内存只有一份拷贝
    • 程序中不希望修改的量
  • 枚举类型–把一组常数符号化,比如星期,职称等有限种类的情形(enum)

P7.存储修饰符

  • auto
  • register
  • static
  • extern

内存的类型–程序分配的内存,主要在栈和堆这两部分。“堆”比“栈”复杂

优美得栈–后进先出得结构
特点:自动分配,自动释放
缺点:栈溢出

P8.基本运算符

四则运算符多数都是既单目又双目,只有一个例外,它是 /

P9.选择与分支

// if语句得条件中可能会发生短路求值现象
int a = 5,b = 8;
int x = 100;
if (a >10 && (x = b)) {
cout << "here" <<endl;
}
cout <<x <<endl
// ?:表达式--是唯一得三目运算符
xxx = a ? b :c;//重点在求值,不在分支

例如

//求三个数最大的那个数
int a=5, b = 2, c = 8;
int m = a;
if (b>m) m = b;
if (c>m) m = c;
cout << m << endl;

P10.switch–当分支情况较多时,选择switch

switch 圆括号中的值必为:整数,字符或者枚举类型

常见bug:

  • 忘记了default;
  • 忘记了在每个case中写break;

假设修正法

P11.while–循环是程序逻辑的关键点

// 从低位到高位,输出每个十进制数位
int a = 657;
while (true) {
cout << a%10 <<endl;
a /=10;
if (a == 0) break;
}

P12.for循环—已知执行次数

// 打印九九乘法表
for (int j = 1;j <= 9; j++) {
     for (int i = 1; i <= j; i++) {
         int k = i * j ;
         cout << j <<"x" << i << "=" << k << " ";
         }
         cout << endl;
 }

循环变量的生存期大于循环体内的局部变量的生存期

P13.函数入门

// 例如
int mydd (int a, int b){
int t=a*10 + b;
return t;
}

调用方法
int x = mydd(5,8);
函数定义时的参数,称为形参,是局部变量,在栈中分配
调用函数时,传递给它的参数,称为:实参

P14.指针入门–指针就是存放其他变量地址的小盒子

指针的定义
类型 *指针名

// 冒泡排序法
void swap (int* p,int* q)
{
      int t = *p;
      *p = *q;
      *q = t;
}

int mid (int a, int b, int c)
{
     if (a>b)  swap (&a,&b);
     if (b>c)  swap (&b,&c);
     if (a>b)  swap (&a,&b);\
     return b;

P15.引用类型

引用是不能运算,只能去引用原来的值

P16.数组入门

任务1:一个整型数组里面,求最大的元素

一般情况下,数组是局部变量
局部变量在栈中分配空间
自动分配,自动释放

怎么知道数组占用多大空间?

// 方法1 元素个数 * 单个元素的大小
#define N 100
...
int a[N];
x = sizeof(int) * N;
// 方法2 sizeof(数组变量名)
#define N 100
...
int a[N];
x = sizeof(a);

2023.9.25更新

P17.函数进阶

使用指针的指针,目的是回填一个指针类型的数据。

P18.数组与指针进阶

指针运算与[]运算的等效性

*(p+n)===p[n]
*p===p[0]

P19.数组元素搬运

数组的拷贝

// 数组的拷贝
void mycopy(int* dst, int* src, const int n)
{
      for (int i = 0; i <n ; i++)
      {
           dst[i] = src[i];
      }
}
// 更全面数组拷贝
void mycopy(int* dst, int* src, int* src_end)
{ 
      if (dst == src) return;
      int n = src_end - src;
      if (dst > src )
           for( int i = n-1; i >= 0; i--) dst[i] = src[i];
       else
            for( int i = 0; i < n; i++) dst[i] = src[i];
}

数组的结构决定了它不适用于频繁地插入和删除,尤其数组很大的时候、
如果需要,可以使用:链表,哈希表,块链等更复杂的结构

P20.插入排序法

2023.9.26更新

P21.二维数组

列优先,存完第一行,存第二行。。。

P22.动态内存分配

内存的分配与释放

  • 栈空间的分配与释放是自动进行的,是隐式的
  • 堆空间的分配与释放是代码显式操作行为

P23.筛法求素数

普通素数算法

// bool is_prime(int x) 如果x是素数,就返回true
bool is_prime(int x)
{
		for (int i = 2; i < x; i++ )
		{	if(x%i == 0)
			return false;
		}
		return true;
}

P24.指针数组与数组指针

2023.9.27更新

P25.const修饰符

  • 当修饰普通变量的时候
// 
const int M = 5;
  • 当修饰数组的时候
// 
const int a[] = {5} ;//修饰int
int const b[] = {6} ;//同上
  • 当修饰指针的时候,就复杂了
// 
int x = 5;
const int *p =&x ;//修饰int,元素不能变,保护x
int const *q = &x ;//同上
int * const r = &x ;//修饰的是指针,r将来不能指向别人,但x可以改

P26.break,continue,return

P27.数学运算

c++的标准写法是cmath(注意,没有.h)

查表

随机数

使用相同的种子,总会得到相同的伪随机序列。

P28.表达式的特性

一个表达式必须要返回一个值。
一个表达式也可能会改变变量的值。

P29.按位运算

P30.数据类型转换

2023.10.07更新

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值