条件判断
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