但俗人都是急于求成和有慵懒的,我便是个比如。不想每篇博客都写一个摘要和那些大段的文字描绘,可是为了让一些新的读者朋友了解我的博客内容,我仍是像前面说的那样,把第一篇关于指针的摘要搬过来,由于我写的这几篇都是关于指针的,所以没有必要每篇一个摘要,在此就偷偷闲了,假如读过我前面两篇C指针博客的朋友可以越过这篇博客前面的摘要不读,直接进入主题部分。
懂得C言语的人都知道,C言语之所以强壮,以及其自由性,绝大部分表现在其灵敏的指针运用上。因而,说指针是c言语的魂灵,一点都不为过。所以从我的标题加了个(一)也可以看出指针的重要性,我尽或许的向咱们告知清楚我关于指针的了解。所以在解说的过程中我尽或许的用代码加文字的描绘办法,经过代码的剖析来加深咱们关于指针的了解,我给出的都是完好的代码,所以读者可以在看的过程中直接copy下去即可运转,期望下面的解说可以对你有所协助。
在C言语中咱们可以运用两种办法来访问一个字符串。
1、用字符数组寄存一个字符串
char str[ ]="this is str!!!";
在此str是一个数组名,代表字符串数组的首地址。
2、用字符指针指向一个字符串
char *str="this is str,too";
C言语关于字符串常量是依照字符数组的办法来进行处理的,在内存拓荒了一个字符数组来寄存字符串常量。在此的str被界说为一个指针变量,指向字符型数组,它只能指向一个字符变量和其他的字符数据。输出都是运用printf("%s",str);,在此过程中体系会先输出一个str所指向的字符数据,然后运用str加1的办法输出下一个字符,知道遇到’\0’串结束符停止,在内存中的字符串的终究都被主动加上一个’\0’。
字符串的传递可以运用传址的办法,用字符数组的姓名或许用指向字符数组的指针变量作为参数。在被调用的函数中可以改动字符串的内容,主函数可以得到改动了的字符串。
一、用字符数组作为参数
接下来看看一个代码:
#include
void copy_string(char from[],char to[])
{
int i=0;
while(from[i]!=’\0′){
(to[i]=from[i]);
i++;
}
to[i]=’\0′;
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
运转成果为:
仅仅从代码完成的难易程度来看的话没有什么难点,可是或许有不少人或许会把咱们代码顶用赤色标志的代码部分遗忘,然后犯错。
在此也给出我的别的一种完成办法:
#include
void copy_string(char from[],char to[])
{
int i=0;
while((to[i]=from[i++])!=’\0′){
;
}
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
运转成果为:
值得注意的是这种完成办法的中的奇妙的利用了while句子while((to[i]=from[i++])!=’\0′)。千万不要写成 while((to[i++]=from[i++])!=’\0′),这样的话每次履行判别句子是i++被履行了两次,导致终究的成果犯错。
二、用字符指针变量
#include
void copy_string(char *from,char *to)
{
int i=0;
while(*from!=’\0′)
*to++=*from++;
*to=’\0′;
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
运转成果为:
在此我也给出一种结合逗号表达式和for循环句子来完成的参阅代码:
#include
void copy_string(char *from,char *to)
{
int i=0;
for(;*to=*from,*from!=’\0′;from++,to++);
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
运转成果为:
代码的奇妙之处在于结合了逗号表达式和for循环句子来完成,由于逗号表达式的成果为终究一个表达式的成果,所以履行判别句子里面的逗号表达式时其所取的值仍然为*from!=’\0’。
有爱好的读者自己可以测验下其他的完成办法,下面再给出几种很奇妙的完成办法,有爱好的读者可以自己研讨下其完成原理,均为完好代码。
#include
void copy_string(char *from,char *to)
{
int i=0;
for(;*to++=*from++;);
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
#include
void copy_string(char *from,char *to)
{
int i=0;
while(*to++=*from++);
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
#include
void copy_string(char *from,char *to)
{
int i=0;
while((*to++=*from++)!=’\0′);
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
#include
void copy_string(char *from,char *to)
{
char*p1,*p2;
p1=from;
p2=to;
while((*p2++=*p1++)!=’\0′);
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
#include
void copy_string(char from[],char to[])
{
char*p1,*p2;
p1=from;
p2=to;
while((*p2++=*p1++)!=’\0′);
return ;
}
int main()
{
char str[]="this is a string!";
printf("%s\n",str);
char dec_str[206];
copy_string(str,dec_str);
printf("%s\n",dec_str);
return 0;
}
就不在此逐个贴出运转成果了,运转成果同上,假如有爱好可以自己研讨下以上代码,一起还有许多的完成办法,期望以上代码可以启示读者的创意写出更多的完成办法和更好的完成计划来。