文章目錄
1. 數組
-
字符數組
char ca[ ] = “C++”;
末尾自動添加null,ca長度爲4。在使用c風格字符串的標準庫函數時,牢記參數必須以結束符null結束。
char ca[ ] = {‘c’, ‘+’, ‘+’};
cout<<strlen(ca)<<endl; //結果未定 -
二維數組
將二維數組當做一維數組初始化
int main()
{
int a[3][3], *p, i;
p = &a[0][0];
for(int i=0; i<9; i++)
p[i] = i + 1;
cout<<a[1][2]<<endl; //a {1,2,3,4,5,6,7,8,9}
}
二維數組動態聲明
//a[m][n]
int **a = new int* [m];
for(int i=0; i<m; i++)
a[i] = new int[n];
- 指針數組、數組指針
指針數組:一個數組裏裝着指針
int *a[10];
數組指針:一個指向數組的指針
int (*p)[10];
2. 字符串
- strlen
//自定義實現
int myStrlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '\0')
len++;
return len;
}
- strcmp
int myStrcmp(const char *str1, const char *str2)
{
assert(str1!=NULL && str2!=NULL);
int ret = 0;
while(! (ret=*(unsigned char *)str1 - *(unsigned char *)str2) && *str1)
{
str1++;
str2++;
}
if(ret<0) return -1;
else if(ret>0) return 1;
return ret;
}
- strcat、strncat
strcat(dest, src) 將src所指字符串添加到dest結尾處
strncat(dest, src, n)
char *myStrcat(char *strDest, const char *strSrc)
{
assert((strDest!=NULL) && (strSrc!=NULL));
char *address = strDest;
while(*strDest)
strDest++;
while(*strDest++ = *strSrc++);
return address;
}
-strcpy、memcpy
char *myStrcpy(char *strDest, const char *strSrc)
{
assert((strDest!=NULL) && (strSrc!=NULL));
char *str = strDest;
while((*strDest++ = *strSrc++) != '\0');
return str;
}
串的模式匹配
KMP。。。
- 例題
將字符串中所有空格替換爲 '%20'
思路:
1.遍歷字符串統計空格出現的個數
2.從字符串末尾開始遍歷,每遇到一個空格就以 '%20' 替換
void ReplaceFun(char str[], int len)
{
int spaceCount = 0;
int newLength;
int i = 0;
for(; i<len; i++)
if(str[i] == ' ')
spaceCount++;
newLength = len + spaceCount*2;
str[newLength] = '\0';
for(i=0; i<len; i++)
{
if(str[i] == ' ')
{
str[newLength-1] = '0';
str[newLength-2] = '2';
str[newLength-3] = '%';
newLength -= 3;
}
else{
str[newLength-1] = str[i];
newLength--;
}
}
}
3. 結構體、聯合體、枚舉
3.1 結構體
- 允許指定佔用特定位數的結構成員,使用沒有名稱的字段來提供間距
3.2 聯合體
- 在任何同一時刻,聯合體中只存放了一個成員,對於聯合體的不同成員賦值,將會對其它成員重寫,原來的成員的值就不存在了。
- 聯合體的用途之一:當數據項使用兩種或更多格式,節省空間
3.3 枚舉
3.4 大、小端
大端存儲格式:字數據的高字節存儲在低地址
小端存儲格式:字數據的高字節存儲在高地址
- 判斷大小端
3.5 sizeof
- sizeof是一個單目運算符,以字節形式給出了其操作數的大小
- 對一個表達式求值,根據表達式的最終結果類型來確定大小
sizeof(2+3.14); //8 - 對一個函數調用求值,根據函數返回類型的大小,函數並不會調用
- sizeof(“\0”) = 2
- union空間
- 枚舉空間
4. 位運算
5. 預處理、作用域、static、const
5.1 預處理
- 宏定義與宏替換
- 文件包含
- 條件編譯
5.2 全局變量、局部變量
- 引用已經定義過的全局變量
-
使用extern
如果使用頭文件方式引用某個在頭文件中聲明的全局變量,若將這個變量寫錯,編譯期間會報錯;
如果用extern方式,將這個變量寫錯,鏈接期會報錯 -
使用域操作符 ::
5.3 static
- static數據成員必須在類定義體的外部定義
- static成員函數不能被聲明爲const
將成員函數聲明爲const就是承諾不會修改該函數所屬的對象,而static成員函數不屬於任何對象。
5.4 const
- 指向const的指針
cptr是一個指針,它指向一個const double。
它所指的東西是不能改變的 - const指針
cptr是一個指針,它指向double的const指針。
指針值不能改變 - 常量數據成員必須在構造函數的成員初始化列表中進行初始化。