字符指针
一、字符指针的有关内容
首先需要明确的是,字符串实际就是字符数组。比如说:
char p="hello world";
实际上应该是:
p={'h','e','l','l','o',' ','w','o','r','l','d','\0'};
因此在定义字符串时,我们需将其看作是数组,也就是说:
p <=> p[]
p[1] <=> *(p+1)
这些是等价的
如上图所示
同时,在表示函数的参数时,下面二者表述等价。
(char p,char q)
(char *p,char *q)
本质上都是传入了字符串的首地址
二、对字符指针进行操作的函数
先贴一个主函数在这里:
main()
{
char a[] = "hello world111";
char b[] = "hello world22";
char c[] = "hello world";
char *str=c;
int len1,len2,len3,m;
printf("at first\na=%s\nb=%s\nstr=%s\n\n", a,b,str);
len1=strlen(a);
len2=strlen(b);
len3=strlen(str);
printf("The length of a is %d\n",len1);
printf("The length of b is %d\n",len2);
printf("The length of str is %d\n\n",len3);
m=strcmp(a,b);
if(m==0) printf("a=b\n\n");
else printf("a!=b and a minus b is %d\n\n", m);
strcpy(b, str);
printf("after copying str to b, b = %s\n\n", b);
strcat(a,b);
printf("after linking b to the a,a = %s\n", a);
}
对于字符串,我们通常需要进行以下操作:
1.测量字符串的长度(不含'\0'):strlen函数
具体原理是逐个扫描,扫描到'\0'字符为止
int strlen(char *s)
{
for(int i=0;*s++;i++);
return i;
}
2.比较两个字符串是否“相等”:strcmp函数
这里的相等指的是每一个字符(直到'\0\为止)都相等。
如果字符串相等,则返回0;
如果不相等,则比较第一次出现不同的字符的ASCII码并相减,并返回差值(前者减后者)
函数如下:
int strcmp(char *s, char *t)
{
while(*s++==*t++ && *s!='\0');
return (*(--s)-*(--t));
}
3.将一个字符串的所有内容“复制粘贴”到另一个字符串中:strcpy函数
需要注意的是,strcpy函数通常是将较“短”的字符串复制粘贴到较“长”的函数中,否则可能会出问题(不然我de了一晚上的bug哪来的)
经过一次次的化简之后:
void strcpy(char *s, char *t)
{
while (*s++ = *t++);
}
(ps.第一次感受到了代码简洁的美)
4.将一个字符串中的内容“连接”在另一个的后边:strcat函数
原理是先令被连接字符串的指针先指向自己的'\0'处,再进行连接。
void strcat(char *s, char *t)
{
while(*s++!='\0');
s--;
while(*s++=*t++);
}
以上便是4个常用的利用字符指针对字符串进行的函数操作。(拖了好长时间终于想起写这个了)
标签:字符,函数,++,char,printf,字符串,指针 From: https://www.cnblogs.com/zekang666/p/17879572.html