有关C语言中指针的一个问题

来源:百度知道 编辑:UC知道 时间:2024/07/06 13:19:57
main()
{char *p;
scanf("%s",p);
printf("%s",p);
}
请问这个程序中,为什么是printf(“%s”,p),而不是printf(“%s”,*p);请高手讲解的清楚一点。

%s是输出字符串,
这个输出需要字符串首地址,即指针变量,所以是p;

比较而言;
%c输出字符,
它需要字符变量而非地址,那么就是*p了。

自己找。

p 是 char * ,是指针,表示地址
*p就是char

scanf后面一定要是地址。

另外,你这个程序,p没有分配内存,会出错;

改成

char *p = (char *)malloc(100);

因为输入的是字符串,你存储的时候直接从p的首地址开始存放,你输出要是从p的首地址开始输出,你要用*p的话,要用循环把所有的字符输出,就是这样的形式for(....)里面省略,printf("......",*(p+i));引号里面省略,要写成这样,scanf里也要用循环输入,p的位置要写成&*(p+i)这个形式