基礎01

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 全局變量、局部變量

  • 引用已經定義過的全局變量
  1. 使用extern
    在這裏插入圖片描述
    如果使用頭文件方式引用某個在頭文件中聲明的全局變量,若將這個變量寫錯,編譯期間會報錯;
    如果用extern方式,將這個變量寫錯,鏈接期會報錯

  2. 使用域操作符 ::
    在這裏插入圖片描述
    在這裏插入圖片描述

5.3 static

  • static數據成員必須在類定義體的外部定義
  • static成員函數不能被聲明爲const
    將成員函數聲明爲const就是承諾不會修改該函數所屬的對象,而static成員函數不屬於任何對象。

5.4 const

在這裏插入圖片描述

  • 指向const的指針
    在這裏插入圖片描述
    cptr是一個指針,它指向一個const double。
    它所指的東西是不能改變的
  • const指針
    在這裏插入圖片描述
    cptr是一個指針,它指向double的const指針。
    指針值不能改變
  • 常量數據成員必須在構造函數的成員初始化列表中進行初始化。
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章