读书人

||指针有关问题

发布时间: 2012-02-07 17:45:36 作者: rapoo

|求助|指针问题
#include <iostream.h>
void main()
{
char* a= "dcdd ";
cout < <a < <endl;
cout < <*a < <endl;
cout < <a+1 < <endl;
cout < <*(a+1) < <endl;
}

1.指针是指向一个地址的,可为什么指针a可以指向 "dcdd "这个字符串常量?是不是很矛盾。
2.cout < <a < <endl;怎么输出的是整个字符串,而不是地址?而cout < <*a < <endl;输出的却是首地址呢?
3.cout < <a+1 < <endl;是否可以理解为首地址向下移动一个地址?输出的是 "cdd "而cout < <*(a+1) < <endl;输出的却是单个c。



[解决办法]
因为char *有特别规定,就是输出它所指的字符串内容而不是地址。
[解决办法]
1.指针变量是保存内存空间的地址的,字符串 "dcdd "在编译的时候,编译器会自己开辟一块空间来保存它,而指针a就是指向这块内地空间的首地址。
2.涉及cout实现细节,可参考相关文献
3.cout < <a+1 < <endl 就是输入a+1所指向的字符串(到\0结尾)
cout < <*(a+1) < <endl;是输出一个字符,因为a是char*类型的
[解决办法]
1.指针是指向一个地址的,可为什么指针a可以指向 "dcdd "这个字符串常量?是不是很矛盾。

"dcdd "被存储在常量区,也有地址,a正是指向该地址

2.cout < <a < <endl;怎么输出的是整个字符串,而不是地址?而cout < <*a < <endl;输出的却是首地址呢?

a本来就是字符串
*a 就是a[0],应该输出d

3.cout < <a+1 < <endl;是否可以理解为首地址向下移动一个地址?输出的是 "cdd "而cout < <*(a+1) < <endl;输出的却是单个c。

*(a+1)就是a[1],应该输出c
[解决办法]
2.cout < <a < <endl;怎么输出的是整个字符串,而不是地址?而cout < <*a < <endl;输出的却是首地址呢?

cout < <*a < <endl;输出的不是首地址!!!而是d,第一个元素

其实整个的你主要记住cout输出a的时候是要输到遇见\0才会结束的,其他一样

读书人网 >C++

热点推荐