cout<<char数组名/数组指针"跟"cout<<int数组名/数组指针"的差别
2013-03-22 11:28
417 查看
原帖地址:http://topic.csdn.net/u/20100625/21/a4a9576e-948b-4518-8e34-6477265de74d.html
问题:
# include "iostream.h"
int main()
{
int a[]={1,2,3,4,5};
char b[]={'h','e','l','l','o','\0'};
char *c="word";
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
如上程序运行结果为:
0x0012FF6C
hello
word
如果在main()中添加以下语句,就可以看到字符数组的起始地址了
char*p=b;
cout<<(void*)p<<endl;//该与句可以查看字符数组b的指针地址
这样会输出地址同样是输出数组名,为什么cout<<a得到的是数组首元素在内存中的地址,而cout<<b得到的是整个数组中存储的数据?
一、结论
1、数组名跟指针很相似。从内存上看它们就是一样的东西,都是保存了某一个地址。
2、输出int数组名和输出指向int数组的指针结果是一样的。都是地址,可以看做是一个变量,这个变量里保存了的值就是地址。
3、输出char数组名和输出指向char数组的指针结果也是一样的。都是字符串,为什么是字符串而不是一个地址值呢?这个是编译器把它们区分开了,编译器对指向int数组的指针和指向char数组的指针作了区分,调用了不同的函数去输出。
问题:
# include "iostream.h"
int main()
{
int a[]={1,2,3,4,5};
char b[]={'h','e','l','l','o','\0'};
char *c="word";
cout<<a<<endl;
cout<<b<<endl;
return 0;
}
如上程序运行结果为:
0x0012FF6C
hello
word
如果在main()中添加以下语句,就可以看到字符数组的起始地址了
char*p=b;
cout<<(void*)p<<endl;//该与句可以查看字符数组b的指针地址
这样会输出地址同样是输出数组名,为什么cout<<a得到的是数组首元素在内存中的地址,而cout<<b得到的是整个数组中存储的数据?
一、结论
1、数组名跟指针很相似。从内存上看它们就是一样的东西,都是保存了某一个地址。
2、输出int数组名和输出指向int数组的指针结果是一样的。都是地址,可以看做是一个变量,这个变量里保存了的值就是地址。
3、输出char数组名和输出指向char数组的指针结果也是一样的。都是字符串,为什么是字符串而不是一个地址值呢?这个是编译器把它们区分开了,编译器对指向int数组的指针和指向char数组的指针作了区分,调用了不同的函数去输出。
相关文章推荐
- "cout<<char数组名/数组指针"跟"cout<<int数组/数组指针"的差别
- cout<<char数组名/数组指针"跟"cout<<int数组名/数组指针"的差别
- error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转"相关的问题
- cout<<endl;与cout<<"/n";的区别
- "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const"问题的解决办法
- keil(MDK)中出现error: #513: a value of type "int" cannot be assigned to an entity of type "char *",即函数返
- Defining <uniqueKey> as a "long" or "int" type throws an error on startup
- 错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall chain<int>::~chain<int>(void)" (??1?$chain@H@@QAE@
- <C>char/char*/char**数组
- error LNK2001: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > 的解决办法
- error C2665: 'ostream_iterator<int,char,struct std::char_traits<char> >::ostream_iterator<int,char,s
- cout<<"hello csdn";
- error LNK2005: "public: void __thiscall std::basic_ofstream<char,struct std::char_traits<char> >::`v
- 小议 cout << i << " " << i++ << endl
- char *ptr=&character; cout<<ptr<<endl;为何乱码
- hdoj1707(set)(s[day][time].insert(name))(cout<<" "<<*it)
- php 与 &lt;input name=&quot;xx[]&quot;数组格式传递关系
- 短小的日志类 和用cout&lt;&lt;"A"&lt;&lt;B&lt;&lt;"/n"一样
- 面试题--字符串指针与字符串数组的区别char* st="abc;与char* str[]="abc";的异同
- LNK2019: 无法解析的外部符号 "public: void __thiscall List<int>::add(int const &)" (?add@?$List@H@@QAEXABH@Z),