C语言Char指针

来源:百度知道 编辑:UC知道 时间:2024/05/24 05:35:57
#include<iostream>
using namespace std;

int main()
{
char* p;
char a[10]="abcdefghi";
p=a;
cout<<p<<endl;
cout<<&a[0]<<endl;
return 0;
}
为什么都输出不了地址,而输出的是字符数组的值?
很感谢大家的回答,还是感觉5楼答案比较贴近,所以分给了他。
不过 还是想问一下你
cout<<&a<<endl;//输出a的首地址
这里&a和我所说的&a[0]为什么不一样?

cout<<操作符的问题·
当<<跟的是char*的话,就输出字符串
p和&a[0]是char*类型,所以是输出数组的整个字符串
cout<<(void*)p<<endl;//可输出p的内容,即数组的首地址
cout<<&a<<endl;//输出a的首地址

int main()
{
char* p;
char a[10]="abcdefghi";
p=a; //p=a就相当于将a的内容给了p,p是一个指向字符串的指针。
cout<<p<<endl;
cout<<&a[0]<<endl;
return 0;
}

显示指针地址只能用&p
显示数组地址只能用&a,注意没有中括号

因为<<被重载了,输出的就是内容。想看地址的话,可以强制类型转换,像这样
cout<<(long)p; 这样就是把16进制的地址转为10进制显示了。
或者也可以用c的printf,像这样
printf("%p",p);
这样输出的就是16进制的地址了。

对指针和数组进行引用,输出引用:

#include<iostream>
using namespace std;

int main()
{
char* p;
char a[10]="abcdefghi";
p=&a[0];
cout<<&p<<endl;
cout<<&a<<endl; //即a[0]的地址
return 0;
}