怎么让一个字符数组输出地址?什么时候能让其输出整个字符串?
第一个输出因为传入的是这个数组的地址,因而根据<<的重载,输出整个字符串,而为什么第二个输出为这个数组的地址?...
第一个输出因为传入的是这个数组的地址,因而根据<<的重载,输出整个字符串,而为什么第二个输出为这个数组的地址?
展开
5个回答
展开全部
c/c++ 语言 中 形式逻辑 不成立。 它对待 字符串的 方式,和 一般类型的 变量的 方式 是不同的,无法套用 用于 一般变量类型的 方法。这是 这种语言的 缺点。
你不得不死记:
char a[]="abc 123 Yz";
语句中 要用 cout << a; 输出字符串(的值)。要用 cout << &a; 输出字符串的地址。
&a[0] 明明是 数组元素 a[0] 的地址,cout << &a[0]; 却输出了字符串(的值)。
c 语言中也是: char a[]="abc 123 Yz";
语句中 a 是地址,printf("%s",a); 输出字符串(的值)。
语句中 a 是地址, printf("%s %p",a,a);
一样a, 格式 %s 输出了字符串, 格式 %p 输出了地址 !
你不得不死记:
char a[]="abc 123 Yz";
语句中 要用 cout << a; 输出字符串(的值)。要用 cout << &a; 输出字符串的地址。
&a[0] 明明是 数组元素 a[0] 的地址,cout << &a[0]; 却输出了字符串(的值)。
c 语言中也是: char a[]="abc 123 Yz";
语句中 a 是地址,printf("%s",a); 输出字符串(的值)。
语句中 a 是地址, printf("%s %p",a,a);
一样a, 格式 %s 输出了字符串, 格式 %p 输出了地址 !
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先要明白:1、cout输出值是根据你娈量类型而定。也就是说int型cout输出也是int,char型 cout当然输出“zhangwei"。
2、cout输出的地址默认是16进制。
那摸摸地:你要让char a【】输出是数字型地址,在输出前强转下就OK
如:cout<<(int)a 简单型
cout<< reinterpret_cast<unsigned int>(a) 正规型
呵呵。。你看来是明白了
2、cout输出的地址默认是16进制。
那摸摸地:你要让char a【】输出是数字型地址,在输出前强转下就OK
如:cout<<(int)a 简单型
cout<< reinterpret_cast<unsigned int>(a) 正规型
呵呵。。你看来是明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为a的类型是个char*,而&a的类型是char(*)[10],只要不是char*,标准库的<<就会当做地址处理,所以cout<<&a输出地址
也就是说,要输出一个c风格字符串的地址,转换一下类型就行,随便转换成其他内置类型的都行,&a就相当于转换了下类型,不直观而已,要直观就用强制方式比如
cout<<(int*)a;
或者干脆就只要数值地址
cout<<(void*)a;
也就是说,要输出一个c风格字符串的地址,转换一下类型就行,随便转换成其他内置类型的都行,&a就相当于转换了下类型,不直观而已,要直观就用强制方式比如
cout<<(int*)a;
或者干脆就只要数值地址
cout<<(void*)a;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
cout对于char[]有重载,这是一个特例,只有字符串数组会输出整个数组,如果是int数组或者别的数组,则不会。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询