版权声明:本文为博主原创文章,未经博主允许不得转载。 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 全局变量、局部变量
- 引用已经定义过的全局变量
-
使用extern
如果使用头文件方式引用某个在头文件中声明的全局变量,若将这个变量写错,编译期间会报错;
如果用extern方式,将这个变量写错,链接期会报错 -
使用域操作符 ::
5.3 static
- static数据成员必须在类定义体的外部定义
- static成员函数不能被声明为const
将成员函数声明为const就是承诺不会修改该函数所属的对象,而static成员函数不属于任何对象。
5.4 const
- 指向const的指针
cptr是一个指针,它指向一个const double。
它所指的东西是不能改变的 - const指针
cptr是一个指针,它指向double的const指针。
指针值不能改变 - 常量数据成员必须在构造函数的成员初始化列表中进行初始化。