【C++期末复习】细节点总结(3~4章函数、数组)

这是一份不求全只求精的知识点总结,虽然不能cover所有的知识点,但是笔者希望它防范出题老师的阴间操作。

优先级

从大到小(部分):()>单目(非/正负号/&*/sizeof/动态存储)>算数运算符(先乘除后加减)>移位>关系运算符(先><后等于不等于)>按位(非与或,但非的优先级在单目运算符)>逻辑运算符(逻辑非与或,但非的优先级在单目运算符)>三目运算符>赋值运算符>逗号
Attention:

cout << ~a << endl;//合法,!(逻辑非)同理.
//但除非以外的算术、关系及逻辑运算符优先级低于输入输出符

指针数组与数组指针

//理解性记忆:括号优先级最高,括号内先结合
const int N;
int *a[N]
//a先与[N]结合,被定义为数组,数组中的成员再被定义为int*类型
//成员为指针的数组,数组中含有N个int*类的指针
int (*a)[N]
//括号内a先与int*结合,被定义为指针,
//指向含有N个元素的数组的指针,存储第一个数的地址
//类型为int*[N]

动态数组及向量(机试推荐,个人偏好)

当我们想读入n个数据时,由于数组限定元素个数为常数,所以选用动态数组以及向量可以让我们迅速做好数据读取。
需要注意的是由于向量的元素数量可以改动,所以在用向量时需要关注向量size的变化,不然容易导致向量越界。

//动态数组
int n;
while(cin >> n)
{
    int *a = new int[n];
    for(int i = 0;i < n;i++)
    {
        cin >> a[i];
    }
}

//向量
#include<vector>//向量声明头文件

vector<int> v;
int n;
while(cin >> n)
{
      for(int i = 0;i < n;i++)
          int num;
          v.push_back(num);
}

//向量常用操作
//数组已定义操作(如下标访问,但地址访问作者表示实在不懂)
 v.insert(v.begin()+n,m,num)//在v[n]前插入m个值为n的元素
 vector<int> v1,v2;
 v1.insert(v1.begin(),v2.begin(),v2.begin()+n)
 //将v2.begin()和v2.end()之间的元素插入v1.begin()之前
//保守起见,请不要用下标等操作代替.begin()
 v.erase(v.begin()+m,v.begin+n)
//删除从v.begin()到v.end()之间的元素,后面的元素前移
//比较运算符与赋值运算符

*与&

在这里插入图片描述

Attention
1、对于函数f(),*****f合法,&&&&f非法
2、对于数组a[],****a及&&&&a均非法

C字符串

字符指针与字符数组

	char s1[50] = "sdfafer";
	//可在定义时赋初值
	//之后不可再对s1赋值
	//但可以cin >> s1;
	const char* s2 = "sdfdsf";
	//老题目可能允许没有const,但近几年的VS不允许
	//定义后可再修改
	//但不可cin >> s2;

sizeof与strlen

    char s1[50] = "e2e2e\0wefdfds";
    cout << sizeof(s1);
    //对于char输出字符数,而非所占字节数,这里与int等不同
    //不受\0影响
    //注意输出的是数组长度50

    cout << strlen(s1);
    //输出字符数,但会受\0影响打断
    //不会将\0及之后的字符计入长度,故输出5
    
    const char *s1 = "sdfa\0fer";
	cout << sizeof(s1);
	//输出指针所占内存大小,故输出8;
	cout << strlen(s1);
	//对于strlen,字符数组与字符指针输出结果一致

含空格输入

char cstr[10];
gets(cstr);//vs15后不可用
gets_s(cstr,size);
cin.getline(cstr,size);
getline(cin,str_obj);

第三章(函数)杂谈

函数指针与指针函数

int* f();
//f为整型指针函数,返回值为int*类型
int (*f)(int x,int y)
//f先与int*结合,被定义为指针
//这个指针被要求指向一个int (int,int)型的函数,即被指向的函数返回值为int型,参数表为(int,int)否则语法错误
//e.x.
   int f1(int,int);
   f = f1;//合法

关于语句标号、作用域与重载

简单抄书,盲猜笔试会考一道
语句标号:用一个标识符表示程序中的某一行,用标号名加冒号组成。
e.x. case,goto
语句标号是唯一具有函数作用域的标识符

局部变量具有块作用域,函数参数的默认值不允许为局部变量。
全局变量具有文件作用域。程序的其他文件也能访问全局变量,但必须在使用该全局变量的每个文件用extern声明。

重载函数参数表不同,返回值类型相同

//e.x.
int f();
double f();
//返回值不同,不允许重载,编译错误

机试推荐

1.洛谷入门题单
2.软院选拔赛2 a,b,d题,ab题前几个点ac即可
https://www.luogu.com.cn/contest/93583

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值