1.宏定義:
#include<iostream>
using namespace std;
#define add(a,b) a+b
int main(){
cout<<5*add(3,4)<<endl; //結果是5*3+4=17
}
2.枚舉值
枚舉類型限定了變量的取值
#include<iostream>
using namespace std;
#define add(a,b) a+b
int main(){
enum num1{
one,
two,
three
} Num1,Num2,Num3;
Num1=one;
Num2=two;
Num3=three;
enum num2{
a,
b=5,
c
} Num2_1,Num2_2,Num2_3;
Num2_1=a;
Num2_2=b;
Num2_3=c;
cout<<"num1-one="<<Num1<<" num1-two="<<Num2<<" num1-three="<<Num3<<endl;//0,1,2
cout<<"num2-a="<<Num2_1<<" num2-b="<<Num2_2<<" num2-c="<<Num2_3<<endl;//0,5,6
/*
1.枚舉類型的默認值爲從0開始,後一個值比前一個大一。
2.如果改變默認值,則該位置往下的值依然比前面大一,該位置前面的保持不變
*/
3.const常量
const定義的常量只能在定義時賦值,且之後不能修改。
#include<iostream>
using namespace std;
#define add(a,b) a+b
int main(){
const int a;
a=2;//出錯,必須在定義時初始化
cout<<a;
}
4.參數傳遞順序
#include<iostream>
using namespace std;
int f(int a,int b, int c)
{
return 0;
}
int main(){
return f(printf("a"),printf("b"),printf("c"));//依次輸出cba
}
1.c++的參數傳遞順序是從右到左的
2.printf()函數形式 ,可見參數格式是int類型,故不會報錯
int printf ( const char * format, ... );
5.結構體存儲對齊問題
- 結構體成員按照存儲數據類型自身的對齊(即是:存儲該變量的首地址%該變量類型所佔字節=0)。
- 結構體按照結構體數據成員的最大儲存值對齊。
看一下例子(假設是在32位系統下)32位下各數據類型及其所佔字節。
char :1個字節
char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器)
short int : 2個字節
int: 4個字節
unsigned int : 4個字節
float: 4個字節
double: 8個字節
long: 4個字節
long long: 8個字節
unsigned long: 4個字節
結構體如下
struct B
{
char b;//首地址0,0%1=0,首地址符合 故地址0-1自己存儲b
int a;//地址2開始,2%4=2不滿足對齊,跳到地址4(4%4=0),故4-7字節單元存儲b
short c; //8%2=0,滿足,故8-9存儲c
/*故數據成員對齊後總共佔用0-9即十字節,又根據結構體按照結構體數據成員的最大儲存值對齊(10%4!=0)故增加到12字節(12%4=0);
*/
};