- 主题:[讨论]char *和int *输出的一点疑惑
好久没用c++了,这几天用cuda传值的时候,发现这两的区别,以前都是直接记下来的,现在想好好研究一下,但是看了半天没看懂
不知道为啥输出时候*p是一个字符,p则是整个字符串?
而下面的*ptr则是整个值,ptr是这个值的地址?
#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
char *p = "zengraoli";
cout << *p << endl;
cout << p << endl;
int age = 23;
int *ptr = &age;
cout << *ptr << endl;
cout << ptr << endl;
return 0;
}
--
FROM 159.226.182.*
我觉得就很奇怪,*p作为整个数字的首地址(遇到\0结束输出),应该输出整个串才对,p则输出地址更加合理吧?
目前状况是刚好相反了,所有我觉得现在有点不好解释
【 在 liuxueshen 的大作中提到: 】
: 这是c的问题
: 为了处理字符串
:
--
FROM 159.226.182.*
我的疑惑是,为何cout << p << endl; 不是输出这个常量的地址?
如果*p输出常量的值,p输出地址不就统一了?
--
修改:zengraoli FROM 159.226.182.*
FROM 159.226.182.*
老实说,我会看啊,我在cuda遇到一个更奇葩的问题,待会我发出来看看
【 在 foliver 的大作中提到: 】
: 你是对的,p如果指针,就输出地址。
: 但是cout对char *做了特殊处理,当重载吧,换成输出字符串,算自己聪明吧,谁会看字符串的地址啊。
--
FROM 159.226.182.*
惨惨惨 这不是自己骗自己了
【 在 lipp 的大作中提到: 】
: 你可以为C设计一套字符串的新语法,然后用宏实现。这样你自己用着就舒服了。
:
--
FROM 159.226.182.*
好像正像你说的那样,<<的重载是遇到char*走char*,遇到int *走void *的输出
【 在 cybereagle 的大作中提到: 】
: *p 输出的是值啊,注意 p 是个 char*,*p 这个表达式的值就是个 char
: p本来可以输出地址
: 但是用char* 指向一个字符串是个常规用法
: ...................
--
FROM 159.226.182.*
试了 还真的是
char *p = "zengraoli";
cout << *p << endl; // z
cout << (void *)p << endl; // 00678B30
cout << &p << endl; // 00B5F72C
第二条直接就是地址了,可是是哪个的地址呢?和最后一句输出的又不一样
【 在 yuanmo 的大作中提到: 】
: *p是首字母的值,p是首字母的地址。你让*p输出整个串显然不对。
: 你想让p变成输出地址,强制类型转换成void *好了。
:
: ...................
--
FROM 159.226.182.*
被你发现了,我已经有很长一段时间没用了
我发出来才想到
【 在 lipp 的大作中提到: 】
: 最后一个是指针变量的地址。。。
: 你对C语言不熟吧?这个问题似乎挺基本的。
:
--
FROM 159.226.182.*
没问题,这下我的疑惑解决了,感谢各位大佬,小弟谢过了
【 在 foliver 的大作中提到: 】
: 那就把char *转成void*或者其他的看地址呗
--
FROM 159.226.182.*
对不起,大佬息怒,我刚学编程,大学还是文科的,不太懂这个,我以为C++跟C语言是一回事
原来这些代码都是可以看成是C的,真是有点丢人了
【 在 here080 的大作中提到: 】
: 你的贴子跟C++没关系。应该去C语言版。
: 你可以去先学习一下谭浩强版的C语言。
:
--
修改:zengraoli FROM 159.226.182.*
FROM 159.226.182.*