char *str[] = { "hello" };
char *p;
p = str[0];
cout << *p << ":" << str[0];
//为什么*p输出是h,str[0]输出是hello
//str[0]应该是首地址才对啊
char *str[] = { "hello" }; char *p; p = str[0]; cout << *p << ":" << str[0]; //为什么*p输出是h,str[0]输出是hello //str[0]应该是首地址才对啊 cout << p << ":" << str[0];//这样输出就可以了。
把p的*去掉,才是字符串的指针。*p是地址里面的内容。
char *str[]是一个二维数据,str[0][0]才表示首地址
p是一个指向字符的指针,所有*p只返回一个字符。
str是一个字符串,也就是一个字符的数组,str[0]会从第0个位置开始到结束符为止。(到哪里结束好像是有一个\0标志的)
str[0] 与str 是一样的,是首地址,即这个数组第一个字符的位置。
p=str[0]; 所以p也是首地址。
使用cout输出时,如果传的是指针,则打出指针对应的值。如果是值,则打出值。
*p 表示首地址上的那个值,也就是hello中的h
str 是首地址,即指针,所以要打出指针指向的整个值。即打出hello