1.赋值语句
#include<iostream>
using namespace std;
int main(void)
{
/*
*True为1,False为0
*/
int x=2,y,z;
x*=(y=z=5);cout<<x<<endl;//结果10
z=3;
x==(y=z);cout<<x<<endl;//结果10
x=(y&z);cout<<x<<endl;//按位与。结果3
x=(y&&z);cout<<x<<endl;//与运算。结果1
y=4;
x=(y|z);cout<<x<<endl;//按位或。结果7
x=(y||z);cout<<x<<endl;//或运算。结果1
return 0;
}
2.C++全局变量与局部变量
#include<iostream>
using namespace std;
int TEMP=3;
int main(void)
{
/*
*C++全局变量与局部变量
*/
int TEMP=10;
::TEMP++;
cout<<::TEMP<<endl;//结果为4
cout<<TEMP<<endl;//结果为10
return 0;
}
3.i++
#include<iostream>
using namespace std;
int main(void)
{
int i=1,j=2;
int k=i+++j;
cout<<k<<endl;//结果是
return 0;
}
4.哪种加一的效率高
#include<iostream>
using namespace std;
int main(void)
{
/*
x=x+1,x+=1,x++;哪个效率最高,为什么?
x=x+1;效率最低,执行过程如下
1.读取右边x地址
2.x+1
3.读取左边x地址
4.将右值传给左边
x+=1;其次,执行过程如下
1.读取右边x地址
2.x+1
3.将值传给x
x++效率最高,执行过程如下
1.读取右边的x地址
2.x自增1
*/
return 0;
}
5.i++
#include<stdio.h>
#define product(x) (x*x)
int main(void)
{
int i=3,j,k;
j=product(i++);
k=product(++j);
printf("%d %d",j,k);//结果是9,49
int a=5,b=3;
int c=!a&&b++;
printf("%d %d",a,b);//结果是5和3,因为!a为假,所以不会再计算后面的数。
//注意:改为&以后,&左右两边的数据都会得到计算。
return 0;
}
6.不同类型相加(类型转换)
#include<stdio.h>
int main(void)
{
unsigned int a=6;
int b=-20;
int c;
(a+b>6)?(c=1):(c=0);
printf("%d",c);//结果是1,因为a+b是不同类型相加,转换为unsigned int型。所以结果是一个非常大的数。
return 0;
}
7.两个数相加
#include<stdio.h>
int main(void)
{
/*两个数的最大数,不准用[if][?:][switch]*/
int max=((a+b)+abs(a-b))/2;
/*两个数交换*/
//第一种方法,对于较大的数,可能会越界。
a=a+b;
b=a-b;
a=a-b;
//第二种方法,不会越界
a=a^b;//按位异或运算,异为1,同为0
b=a^b;
a=a^b;
return 0;
}
8.小问题
#include<stdio.h>
int main(void)
{
/*
问题1:头文件中的ifndef/define/endif是用来干什么的?
防止头文件被引用
问题2:#include<filename.h>与#include"filename.h"区别
前者从标准库路径开始搜索,后者从用户的工作路径开始搜索。
问题3:使用#define定义一年有多少秒
注意:最后面没有这个符号【;】
#define SECONDS_PER_YEAR (60*60*24*365)UL
问题4:定义一个标准宏MIN,求两个数的最小值
#define MIN(A,B) ((A)<=(B)?(A):(B))
问题5:const与#define相比的不同
const常量有数据类型,#define没有数据类型
有些编译器可以对const进行安全检查,但是后者只是进行字符替换
*/
return 0;
}
9.有意思的sizeof
#include<stdio.h>
struct
{
short a1;
short a2;
short a3;
}A;
struct
{
long a1;
short a2;
}B;
int main(void)
{
/*
求所有的sizeof(变量名)的大小
*/
char *ss1="0123456789";//4
char ss2[]="0123456789";//10
char ss3[100]="0123456789";//100
int ss4[100];//400
char q1[]="abc";//4,注意sizeof(q1)实际上就是sizeof(指针)
char q2[]="a\n";//3,注意\n算作一位,所以空间大小为3
char *q3="a\n";//4
char *str1=(char *)malloc(100);//4
char *str2=(void *)malloc(100);//4
sizeof(A);//6
sizeof(B);//8内存对齐原则,详见http://blog.csdn.net/wang6279026/article/details/8118259
//补充
// sizeof(空类)为1,单一继承的空类空间还是1,多重继承的空间也是1.
// 但是继承设计到虚表(或者虚指针),空间大小就是4
return 0;
}
10.内敛函数和宏
#include<stdio.h>
int main(void)
{
// 内联函数和宏的差别
// inline是指嵌入式代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。
// 对于短小的代码来说,inline可以提高效率。与宏函数相比inline更加可靠。
return 0;
}