基础01

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxt_1/article/details/88372348

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指针。
    指针值不能改变
  • 常量数据成员必须在构造函数的成员初始化列表中进行初始化。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zxt_1/article/details/88372348