C/c++語言中的關鍵字:
類1:數據類型關鍵字
Char , int, float, double,long,short,signed, unsigned, enum , struct, union, class, void
類2:控制語句關鍵字
循環語句: For ,do, while,break,continue
條件語句:if ,else, goto
開關語句:swith, case, default,return
類3:存儲類型關鍵字
auto , register, static, extern,
類4:其他
sizeof, typedef,const,volatile
C++中部分的關鍵字:
類1: public, protected, private;
注意:c中的struct沒有行爲,不可以定義函數,但可以有函數指針;
c++中的struct可以定義函數,默認爲private;
C++中struct 和class的區別:
1)默認繼承權限:class,private ; struct ,public;
2)默認成員訪問權限:class,private, struct,public;
關於sizeof,請記住:
計算變量所佔的空間時,()可省去,計算類型大小時,()不可省
sizeof(i)=sizeof i=sizeof(int)=4;有關sizeof的計算題:更多大小端字節與sizeof()舉例見我的博文:
1.
void main()
{
char aa[10];
printf(“%d”,strlen(aa));
}
注意:
sizeof()與初始化無關,sizeof是關鍵字(在編譯時完成),但strlen()是函數在運行時求值,與初始化有關,不初始化可能導致錯誤
2.給定結構structA
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};問sizeof(A)= ? 8
3、設有以下說明和定義:
typedef union {
long i;
int k[5];
char c;} DATE;
struct data {
int cat;
DATE cow;
double dog;} too;
DATE max;
則語句printf("%d",sizeof(structdate)+sizeof(max));的執行結果是:_____
【標準答案】DATE是一個union, 變量公用空間. 裏面最大的變量類型int[5], 佔用20個字節. 所以它的大小是20
data是一個struct, 每個變量分開佔用空間. 依次爲int4 +
DATE20 + double8 = 32.
所以結果是20 + 32 = 52.
int a[5];
sizeof(a)=sizeof(int) * 5=20;
sizeof(a[10])=4;
取地址:
sizeof(&a[1])=4;
sizeof(&a)=4;
5:
main()
{
Int a[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
int* ptr2=(int*)((int*)a+1);
printf(“%d,%d,%d”,*(a+1),*(ptr-1),*ptr2); 結果:2,5,2
}
數組名a作爲右值,代表數組首元素地址&a[0];而並不是數組的首地址,儘管兩者數值相同;
數組名a不能作爲左值,可以訪問數組中的某個元素(如a[0],a[1],可以作爲左值),但是不能對數組整體訪問;
類似++a,不成立。
地址 0-3 4-7 8-11 12-15 16-19 20-23
數值 1 2 3 4 5
&a+1 就是地址爲20的地方
*ptr1[-1]就是20-4=16這個地方 一個Int 佔用4個地址
(int)a+1 跟(int*)a+1不一樣 前者地址爲1 後者爲4,
所以,int *ptr2=(int*)((int)a+1);*ptr2表示的是指向地址爲1的指針地址
有關符號的計算:
注意:
1.char在默認情況下位有符號,數值範圍是【-128,127】,超出此範圍產生溢出,負數以補碼的形式存放;
2.溢出時,取低8位;當-255,全0
3.strlen(),計算字符串長度不包括最後的’\0’;
追問三個問題:
1. 0與-0,在內存如何存放?
0與整數都以原碼存儲,並不存在-0的補碼的說法;
2. int i=-20;unsigned int j=20;
i+j= 32808
有符號數與無符號數相加時,都轉爲無符號數
3. unsigned i ;
for(i=9;i>=0;i--)
{ printf("%u\n",i); }
答:無限循環中~~分析struct ,class, union
Struct成員默認是public;class成員默認是private;
在union中成員默認是public,所有的數據成員共享一個空間,同一時間只能存放其中一個數據,
所有的數據成員擁有相同的起始地址;主要用來壓縮空間,存放不會在同一時間同時用到數據;
大小端字節對於union的影響:
例:
在小端字節序中;u.i=0x3839;
在大端字節序中:u.i=0x3938;
在棧中數據存放從高地址向低地址;
對聯合體任何數據的訪問都是從首地址開始的;