作者allssddaa (屌炸天)
看板C_and_CPP
标题[问题] 字元指标的问题
时间Thu Sep 5 09:32:52 2019
开发平台(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):
按照网站的教学宣告一个字元的指标
但是编译却出错误
直接复制网站的也是这样
请问是什麽问题呢
网站教的是错的吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.249.92.60 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1567647174.A.E03.html
1F:→ Lipraxde: 意思是你不能把 const T * 丢给 T * 09/05 11:30
2F:→ tw4563335: 先宣告变数产生记忆体位置才能用指标指向变数 09/05 12:28
3F:推 Gway: void *addr改成宣告 const char *addr 09/05 12:46
4F:→ james732: 这个写法在纯C是OK的,看起来是C++比较严格 09/05 12:49
5F:推 kaneson: 工具type checking变严是趋势, 加上强制转型str = (char* 09/05 15:41
6F:→ kaneson: ) "world"; 及 add = (void*) str; 符合等号左边即可, 09/05 15:41
7F:→ kaneson: 早期c的type checking很松, 所以有些旧书或教学打在新工 09/05 15:41
8F:→ kaneson: 具上会报错,还有这支例子不适合学hello world的新手 09/05 15:41
9F:→ loveme00835: 因为你复制的是 C code 不是 C++ code 09/07 03:29
10F:→ dces4212: 请问c++ 的*char预设是const吗 不然为什麽第二次assign 09/08 20:37
11F:→ dces4212: str的时候会跳那个error 感谢 09/08 20:37
12F:推 LPH66: 楼上想问的应该是用 "" 括起来的 literal 09/08 23:01
13F:→ LPH66: 是这个的话那没错, C++ 的字串 literal 都有 const 09/08 23:01