目录
1.两种形式和输入
1.两种形式
2.输入多个字符串
1.数组
2.动态内存分配
2.用指针实现字符串操作函数
1.strlen
2.strcpy
3.strcat
4.strcmp
5.strchr
6.strstr
3.typedef
1.简化类型
2.定义与平台无关的类型
3.定义数组类型
4.给函数指针取别名
5.注意
4.复杂指针解析
1.两种形式和输入
1.两种形式
char str[]="";//字符数组存储字符串,可以修改
char* name="";//字符指针指向字符常量,不能修改———–>地址唯一,节省空间
所以一般写成const char* name="";来标明提醒
2.输入多个字符串
1.数组
char name[5][10]={0};
for(int i=0;i<5;i++)
{
gets_s(name[i],10);//专门用来输入字符串的函数,能够接受空格
}
2.动态内存分配
char* strs[5]={NULL};//一维数组中存放的是5个指针
for(int i=0;i<5;i++)
{
strs[i]=calloc(10,sizeof(char));
assert(strs[i]);
gets_s(strs[i],10);
}
//释放
for(int i=0;i<5;i++)
{
free(strs[i]);
}
free(strs[5]);
2.用指针实现字符串操作函数
1.strlen
//法一:
int _strlen(const char* str)
{
int size=0;
while(*(str+size)!='\0')
{
size++;
}
return size;
}
//法二:
int _strlen(const char* str)
{
const char* star=str;
while(*(star++));
return star-str-1;//-1是因为后置++,star-str-1利用的是地址之差等于元素个数
}
2.strcpy
//返回dst,所以不能修改指向
char* _strcpy(char* dst,const char* src)
{
char* p=dst;
while(*src)
{
*p++=*src++;
}
*p='\0'; //如果不加上\0,当dst长度大于src,则dst\0之后还会输出
return dst;
}
3.strcat
char* _strcat(char* dst,const char* src)
{
char* p=dst;
while(*p++);
p--;
_strcpy(p,src);
return dst;
}
4.strcmp
int _strcmp(const char* str1,const char* str2)
{
while(*str1&&*str2)
{
if(*str1!=*str2) //不相等就退出,意味着决出了胜负
{
breal;
}
str1++;
str2++;
}
if(*str1-*str2>0)
{
return 1;
}
else if(*str1-*str2<0)
{
return -1;
}
return 0;
}
5.strchr
char* _strchar(const char* str,int val)
{
while(*str)
{
if(*str==val)
{
return str;
}
str++;
}
return NULL;
}
6.strstr
char* _strstr(const char* str,const char* substr)
{
while(*str)
{
char* pstr=str;
char* psubstr=substr;
while(*pstr++==*psubstr++)
{
if(*psubstr=='\0')
{
return str;
}
str++;
}
}
return NULL;
}
3.typedef
1.简化类型
2.定义与平台无关的类型
3.定义数组类型
typedef int Arr[10];
Arr nums;//相当于int nums[10];
4.给函数指针取别名
typedef void (*pfun)(int* p);
pfun fx=foo;
fx();
5.注意
typedef int* int_ptr;
int_ptr pp=&age;
const int_ptr pp1=pp;
//注意const int_ptr为int* const,不能单纯理解为替换,
//指针类型加一个const,即为指向不能修改
4.复杂指针解析
右左法则
- 首先从最里面的圆括号(应该是标识符)看起,然后往右看,再往左看
- 每当遇到圆括号时,都应该调整阅读方向
- 一旦解析完括号里面所有东西,就跳出圆括号
- 重复这个过程直到整个声明解析完毕
版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_72157449/article/details/128371203