C++基础——那些容易被忽视的知识点

“最近重温C++的基础知识,意识到初次学习时遗漏的一些知识点,记录下来,方便日后工作学习。”

下面正文开始:

一、输入输出控制符

在printf和scanf中可以使用以"%”开头的控制符,指明要输入或输出的数据的类型以及格式。

1.1 输出double类型变量的格式控制符是%lf,%f代表float。

1.2 cin/scanf,cout/printf区别

      cin,cout速度比scanf.printf慢,输入输出数据量大时用后者;

      一个程序里面不要同时用cin和scanf,不要同时用cout和printf

1.3 EOF是什么?

      EOF是直接能拿来用的符号常量,若scanf(...)值为EOF(即-1)则说明输入数据已经结束;

      如何在不想继续输入参数时停止输入,直接结束程序?

      在Windows系统下,Ctrl+Z然后回车,程序结束。

1.4 freopen

      调试程序时,每次运行程序都要输入测试数据,太麻烦。可以将测试数据存入文件,然后用freopen将输入由键盘重定向为文件,则运行程序时不再需要输入数据了。

freopen("test.txt","r",stdin); //此后所有输入都来自文件test.txt

二、数组

   2.1 计算数组的占用多少字节的存储空间

T a[N];//T为类型名,如char,double,int等。N为正整数或值为正整数的常量表达式。

     数组a有N个元素,每个元素都是一个类型为T的变量。N个元素在内存里是一个挨一个连续存放的。a数组占用大小总共为N×sizeof(T)字节的存储空间。表达式sizeof(a)的值就是整个数组的体积,即N×sizeof(T)。

     2.2 数组越界

     数组元素的下标,可以是任何整数,可以是负数,也可以大于数组的元素个数。用变量作为数组下标时,可能会导致数组越界(变量下标值变为负数,或者太大)。

     数组越界可能造成——1.引起意外修改其他变量的值,导致程序运行结果不正确;2.试图访问不该访问的内存区域,导致程序崩渍。
     此外,数组越界的程序,用某些编译器编译后可能可以正确运行,换一个编译器编译后就运行错误。

    2.3 二维数组作为函数的参数

    二维数组作为形参时,必须写明数组有多少列,不用写明有多少行。理由如下:

    形参数组的首地址就是实参数组的首地址,必须要写明列数,编译器才能根据下标算出元素的地址。

    如a[i][j]的地址:数组首地址+i × N x sizeof(a[0][0])+j × sizeof(a[0][0])(N是数组列数)。

三、数学函数
     数学库函数声明在cmath中,主要有:

int abs(int x)         //求整型数x的绝对值
double cos(double x)   //求x(弧度)的余弦
double fabs(double x)  //求浮点数x的绝对值
int ceil(double x)     //求不小于x的最小整数
double sin(doublex)    //求x(弧度)的正弦
double sqrt(double x)  //求x的平方根

四、字符处理函数

    这些库函数在ctype中声明,主要有:

int isdigit(int c)  //判断c是否是数字字符
int isalpha(int c)  //判断c是否是一个字母
int isalnum(int c)  //判断c是否是一个数字或字母
int islower(int c)  //判断c是否是一个小写字母
int islower(int c)  //判断c是否是一个小写字母
int isupper(int c)  //判断c是否是一个大写字母
int toupper(int c)  //如果c是一个小写字母,则返回对应大写字母
int tolower(int c)  //如果c是一个大写字母,则返回对应小写字母

五、逻辑运算、位运算

      5.1 按位异或 " ^ "

      按位异或运算通常用未将某变量中的某些位取反,且保留其他位不变。

      例如,如果需要将int型变量n的低8位取反,而其余位不变,则可以执行:

n  ^=Oxff ;

    异或运算的特点是:如果a^b=c,那么就有c^b=a以及c^a=b。(穷举法可证),此规律可以用来进行最简单的加密和解密。

    另外异或运算还能实现不通过临时变量,就能交换两个变量的值:

int a=5,
b=7;
a=a^b;
b=b^a;
a=a^b;

    即实现a,b值交换。(这个是不是有点神奇?)

    5.2 左移运算符 “ << ”

    实际上,左移1位,就等于是乘以2,左移n位,就等于是乘以2^n^

    而且(敲黑板!)左移操作比乘法操作快得多。

    5.3 右移运算符 “ >> ”

    表达式:a>>b的值是:将a各二进位全部右移b位后得到的值。右移时,移出最右边的位就被丢弃。a的值不因运算而改变。

    对于有符号数,如long,int,short,char类型变量,在右移时,符号位(即最高位)将一起移动,并且大多数C/C++编译器规定,如果原符号位为1,则右移时高位就补充1,原符号位为0,则右移时高位就补充。

    实际上,右移n位,就相当于左操作数除以2^n^,并且将结果往小里取整。

                                                  -25>> 4=-2 ;

                                                    -2>> 4=-1 ;

                                                   18>> 4= 1 ;

 

以上就是本次的总结啦(撒花,期待下一次的温故而知新~~~

  • 127
    点赞
  • 398
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值