自己的C++题目总结

条件判断

int a=1,b=0;

++a<3||++b; 执行以上语句后b的值为:0

如果换成++b||++a<3,b就变成了1,换成++a > 3 || ++b  b也是1  换成++a>3||b++,b也是1

从左往右运算,++a=2为真,满足条件就不再往下运行

++a>3不成立,会继续运行,看++b是否为真这个条件是否成立

左移位

int a = 13;
    cout << (a << 2); 结果为52 由二进制  1101 变为110100,自行运算得出结果

运算符优先级

int a ;a = 25 / 3 % 3;  

结果是2  除的优先级比取余高

int a = 7, b = 9, t;
    t = a *= a > b ? a : b;
    cout << t;

结果是63

先判断a是否大于b,否,则a*=9=63

i=1*(x<0)+2*(x==0)+3*(x>0)

当x<0时,i=1*x,以此类推 

int a = 12;
    a += a -= a * a;
    cout << a;

结果是-264

记住等号是将右方的值赋给左方

先算乘法:a-=a*a, 也就是a=a-a*a,  a=12-12*12=-132

然后a+=a,也就是a+a,结果是-264 

结构体定义

结构体是不同数据类型的数据集合,作为数据类型,必须先说明结构体的类型

转义字符

 

char str[] = "\017\t\\abcd\n";
    cout << sizeof(str);

结果为9   \017算一个,\t算一个,\\算一个 abcd算4个 \n算一个 最后还有一个\0,所以结果为9

形式:\ddd
表示ACSII码值等于该八进制数的字符,最短一位\d,最长三位\ddd,若超过三位则超出部分不算在转义字符内,八进制的前缀0可以省略,d的数值应为0~7(部分高浏览量帖子把这里搞错了!!!);

ddd表示的范围从0到127,转换为八进制就是\000~\177
举个栗子
‘\101’, 十进制为64*1+8*0+1*1=65,而码值为65的字符为‘A’,所以‘\101’表示字符'A'

十六进制转义字符

形式:\xhh
表示ACSII码值等于该十六进制数的字符,最短一位\xh,最长两位\xhh,超出部分同样不算,十六进制的标准前缀0x或0X不用再额外加上,h的数值为0~9,a~f;

那么\xhh 的范围就是\x00~\x7f
举个栗子
'\x41',十进制为16*4+1*1=65,同样表示字符‘A’
————————————————
版权声明:本文为CSDN博主「妮推」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43432875/article/details/85298334

 前置++与后置++运算

int a = 2, b = 3, c = 4;
    a *= 16 + (b++) - (++c);
    cout << a;

a=28 b++是3,++c是5

后置++本次使用原来的值,前置++使用运算后的值

数据存储形式

在c语言中char型数据在内存中的存储形式是ASCII码

指针数组

设有如下定义: char *aa[2]={"abcd","ABCD"}; 则以下说法中正确的是( )

A)aa数组成元素的值分别是"abcd"和ABCD"
B)aa是指针变量,它指向含有两个数组元素的字符型一维数组
C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D)aa数组的两个元素中各自存放了字符'a'和'A'的地址

选D

C错误的原因:存放的是字符串常量,而不是一维字符数组

字符串常量在内存中的存放方式是:按串中字符的排列次序顺序存放,每个字符占1字节,并在末尾添加‘\0’作为结束标志。这实际是一个隐含创建类型为char 的数组,一个字符串常量就表示这样一个数组的首地址,因此可以吧字符串常量赋给字符串指针,由于常量值不能更改,应该将字符串常量赋给指向常量的指针 const char * str="ABCDEF"

 由此可以看出a[0]和a[1]分别是字符串‘a’和'b'的地址

直接cout<<a[0]或a[0]+1的意思是:以a[0]或a[0]+1的地址为首地址,输出后面的所有元素

求数组大小(字符数组大小)

 char a[] = { 'a','b','c','d','e' };
 char b[] = { 'h','a','b','c','d','\0' };
 char c[10] = { 'h','a','b','c','d' };
 char d[6] = { 'h','a','b','c','\0' };

通过sizeof运算得出,它们的大小分别为:5,6,10,6 字节

由此可以得出:如果自定数组空间(自己在方括号里写上数字),那么数组的大小就是数组空间

如果不自定数组空间,我们往字符数组里塞几个元素,那么它的大小就是元素个数

对于不自定空间的字符数组,如果我们不在最后放'\0',它不会自动给我们加上'\0'

而自定空间的字符数组,如果元素个数小于空间大小,其会自动用'\0'填充剩余空间

cout << (int)*(c + 6) << endl;//结果为0,

而'\0'的ASCII值就是0,验证了我们的结论

宏定义只能单独成一行,不能一行定义多个宏

如上,af是有错误的 

#define SQR(x) (x)*x
#include<iostream>
using namespace std;    
int main(void)
{
    int k = 2;
    cout << SQR(k + 1);
}

运行结果是7   

原因:宏替换是只替换不组合

 #define SQR(x) (x)*x 的意思是,只要见到SQR(x),就用(x)*x替换

而且完全是是字面上的替换

于是,就替换成了(k+1)*k+1 

通过计算得到答案为7

函数

 题目有给指针,并且是一维数组,直接用题目的指针表示就好

 注意函数的通用性

题目要求有n,n必须写上,而不是用题目示例的那个值代替n

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值