1.栈取返回变量的值,变量的地址
2.const
3.二级指针
第一种内存模型
指针数组:它是一个数组,数组中的每个元素是指针类型
char *p1 = "111";
char *p2 = "222";
char *p3 = "333";
char *p[] = {"111","222","333"};
第二种内存模型
char a[][30] = {"111","222","333"};
第三种内存模型
char **p = (char **)malloc(3*sizeof(char *));
for(int i=0; i<3; i++)
{
p[i] = (char *)malloc(10*sizeof(char));
sprintf(p[i],"%d%d",i,i);
}
4.练习
有字符串有以下特征(“abcd11111abcd2222abcdqqqqq”),求写一个函数接口,输出以下结果。
把字符串替换成(dcba11111dcba2222dcbaqqqqq),并把结果传出。
要求:
1. 正确实现接口和功能
2. 编写测试用例
/*
src: 原字符串
dst: 生成的或需要填充的字符串
sub: 需要查找的子字符串
new_sub:提换的新子字符串
return : 0 成功
-1 失败
*/
int replaceSubstr(/* in */char *src, /* out */char** dst,
/* in */char *sub, /* in */char *new_sub);
过程:
int replaceSubstr(/* in */char *src, /* out */char** dst,
/* in */char *sub, /* in */char *new_sub)
{
// src = "22abcd11111abcd2222abcdqqqqq"
// dst = "22dcba11111dcba2222dcbaqqqqq"
if (src == NULL || dst == NULL || sub == NULL || new_sub == NULL)
{
return -1;
}
char tmp[512] = { 0 }; //临时变量, 字符数组
char *start = src; //记录查找的起点
char *p = NULL; //匹配字符串的首地址
do
{
p = strstr(start, sub);
if (p != NULL)
{
int len = p - start;
if (len > 0)
{
//把匹配字符串前面的内容连接过去
strncat(tmp, start, len);
}
strncat(tmp, new_sub, strlen(new_sub)); //追加替换的新串
//更改查找的起点位置
start = p + strlen(sub);
}
else
{
strcat(tmp, start);
break;
}
} while (*start != 0 );
char *buf = malloc(strlen(tmp) + 1);
strcpy(buf, tmp);
*dst = buf;
return 0;
}
5.常用函数
strstr()、strctr()
strcat()、strncat():字符串连接
strcpy()、strncpy()