[问题] 字符指标的问题

楼主: allssddaa (屌炸天)   2019-09-05 09:32:52
开发平台(Platform): (Ex: Win10, Linux, ...)
WIN10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
visual studio 2019
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
喂入的资料(Input):
预期的正确结果(Expected Output):
hello 0x440000
world 0x440008
错误结果(Wrong Output):
E0144 类型 "const char *" 的值无法用来初始化类型 "char *" 的实体
E0513 类型 "const char *" 的值无法指派至类型 "char *" 的实体
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
#include <iostream>
using namespace std;
int main() {
char* str = "hello";
void* add = 0;
add = str;
cout << str << "\t"
<< add << endl;
str = "world";
add = str;
cout << str << "\t"
<< add << endl;
return 0;
}
补充说明(Supplement):
按照网站的教学宣告一个字符的指标
但是编译却出错误
直接复制网站的也是这样
请问是什么问题呢
网站教的是错的吗?
作者: Lipraxde (Lipraxde)   2019-09-05 11:30:00
意思是你不能把 const T * 丢给 T *
作者: tw4563335 (tw4563335)   2019-09-05 12:28:00
先宣告变量产生内存位置才能用指标指向变量
作者: Gway (我爱的你 也爱我 好吗?)   2019-09-05 12:46:00
void *addr改成宣告 const char *addr
作者: james732 (好人超)   2019-09-05 12:49:00
这个写法在纯C是OK的,看起来是C++比较严格
作者: kaneson (Lance)   2019-09-05 15:41:00
工具type checking变严是趋势, 加上强制转型str = (char*) "world"; 及 add = (void*) str; 符合等号左边即可,早期c的type checking很松, 所以有些旧书或教学打在新工具上会报错,还有这支例子不适合学hello world的新手
作者: loveme00835 (发箍)   2019-09-07 03:29:00
因为你复制的是 C code 不是 C++ code
作者: dces4212 (flawless)   2019-09-08 20:37:00
请问c++ 的*char默认是const吗 不然为什么第二次assignstr的时候会跳那个error 感谢
作者: LPH66 (-6.2598534e+18f)   2019-09-08 23:01:00
楼上想问的应该是用 "" 括起来的 literal是这个的话那没错, C++ 的字串 literal 都有 const

Links booklink

Contact Us: admin [ a t ] ucptt.com