p是一个指向指针的指针。为何printf("%s“,* p)和printf("%d",* p)输出的值不同?

如这个程序:
int main()
{
char* name[]={"Follow Me","BASIC","Great Wall","FORTRAN","Computer design"};
char** p;
int i;
for(i=0;i<5;i++)
{
p=name+i;
printf("%d\n",* p);
printf("%s\n",* p);
}
return 0;
第一个printf输出的是Follow Me等。第二个printf输出的是一串数字。还有,输出若写成cout<<* p<<endl;同样是输出Follow Me等.
}
最新回答
↘琪子

2024-11-26 03:48:10

我想你搞错了,第一个printf输出的是一串数字。第二个printf输出字母,因为你设置了输出的格式,第一个printf("%d\n",* p);输出的是整数,其实“Follow me“在内存中的地址。

第一个 printf("%s\n",* p);要求输出的是字符串,这样就输出了字母了。下面几个的输出也是相同的原理。

而利用cout输出时,由于C++可以自己匹配,所以它输出的是字符串。

追问
恩,不小心搞错了。这个我应经弄懂了。在问一下,当我们定义char* name="Follow me";时,name应该是一个指向指针的指针吧?
追答
不是,char* name="Follow me";   不对,name 是 char * 类型的,是指向字符串的指针。
岁月之沉淀

2024-11-26 06:10:46

%s表示输出p指向的地址的内容

%d表示输出p的地址,并且以10进制表示

梁小鬼

2024-11-26 05:10:30

你用%d来输出的话,输出的应该是字符的ascii。如果想打印字符,要使用%c输出 。
但是因为你的字符串都是不定长的,用%c很难实现。
风住尘香花已尽

2024-11-26 07:49:52

p– >a,结构体指针名– >成员名,指针存放s的地址,所以p指向s。%d是十进制