定义char s[] ={'a','b','c'},输出s为什么不是地址

C++语言 码拜 9年前 (2016-06-09) 1564次浏览
代码如下

#include<iostream>
#include<string>
using namespace std ;
int main(  )
{
	//C风格
	char s1[] = "abcd" ;
	char s2[] = {"a","b","c","d"} ;//不以空字符结束
	cout<<strlen( s1 )<<endl ;
	cout<<"s1: "<<s1<<endl ;
	cout<<strlen( s2 )<<endl ;/*严重错误,s2没有以空字符结束,
								strlen函数可能沿着s2在内存中的位置一直寻找,
								直到遇到空字符*/
	cout<<"s2: "<<s2<<endl ;
	cout<<strcmp(s1,s2)<<endl ;
	string s("hello world") ;
	const char *s3 = s.c_str() ;
	cout<<"*s3: "<<*s3<<endl ;
	cout<<"s3: "<<s3<<endl  ;
	int a[3]={1,2,3} ;
	cout<<"*a: "<<*a<<endl ;
	cout<<"a: "<<a <<endl ;
	return 0 ;
}

定义char s[] ={'a','b','c'},输出s为什么不是地址

解决方案

20

原因是<<专门对字符串重载过了,输出的是字符串的内容而不是地址

20

对于char*指针,cout是输出其指向的字符串
假如需要输出地址,可以将char*指针转换成void*再输出
或使用printf (%p, s1)

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明定义char s[] ={'a','b','c'},输出s为什么不是地址
喜欢 (0)
[1034331897@qq.com]
分享 (0)