这个printf为什么这样写?

来源:百度知道 编辑:UC知道 时间:2024/06/17 20:09:03
#include <stdio.h>

void find_char( char *source, char *chars)
{
char *s=source;
char *c=chars;
while(*s!='\0')
{
while(*c!='\0')
{
if(*s==*c)
{
printf("%c",*s); //这后面为什么是*s,而不是s

}
c++;

}
c=chars;
s++;
}
}

void main()
{
char *source="abcdef";
char *chars="hefpiu";
find_char(source,chars);
}

因为输出的是char型数据 s是char指针 *s是指针指向的数据

*s表示取s当前指向的一个字符,而s表示输出这个字符串。

printf("%c",*s); //这后面为什么是*s,而不是s
%c表示输出单个字符,所以是*s,因为s为地址;
如果是printf("%s",s)这样也可以。输出字符串,从s地址开始。

指针功能啊,指针指向的是存储单元的首地址,不是里面的存储数据,这里要输出的是S这个存储单元里的内容,C语言里不能直接指向里面的内容,而是指向存储单元的首地址

s是一个指向字符的指针,如果写s就是一个指针,输出的是16位的地址.可能会出错,因为C语言对输出比较严格,没有C++那么自由.
写成*s是因为它相于一个字符变量.如里在上面定义为:
char s;那么就要用s了.