请问这个c++简单问题。急

来源:百度知道 编辑:UC知道 时间:2024/06/14 15:20:05
VC++6中,
char * name="kite";
cout<< &name << name ;

输出是 0012FF7C 与 kite

请问:在cout输出时,为什么&name(而不是name)表示字符串name的地址?我记得name也是地址啊。
一楼和二楼的回答不得要领

楼主说说我的理解,希对你有所帮助。
做个实验。
#include<stdio.h>
#include<iostream.h>
main()
{
char *string="abcd";
printf("%d\n",string);
printf("%s",string);
}
看到了吗,用%d输出你就得到了地址;而你用%s输出你就得到了字符串。
这是因为不同的格式对应不同的输出方式而已。所以你不必深究了,记住就行了。%s比较特殊,它是表示输出它指向的一个字符数据,然后自动使string加1,知道遇到'\0'为止。
所以最后能得出结论。C++中cout输出字符指针的格式默认是按%s来输出的。
明白了吗?

char * 特殊。

int a[] = {1,2,3};
cout << a << endl;
输出a的地址。

char *s = "abcd";
cout << s << endl;
输出s的内容 “abcd".

char *s = "abcd";
cout << *s << endl;
输出s的第一个字母,a.

程序就是输出字符串name的地址和值。
&name 输出地址,name输出值。

&这个是取地址符啊;
这样说该简单了;

name等价于*name(因为你定义char *name)那么name就是*name的别名(可以这么理解)
而*name就是name所指地址中的值。&取的是name[0]的地址;

*name 这个指针在直接赋值的时候,char类型是占1个字节的 ,*name="kite",是开辟了一个地址,首地址储存的是字符'