我现在已经在谷歌上搜索了很多,但我仍然找不到解决这个问题的办法……问题是,我正在尝试制作一个程序,在坐标系中存储不同的点,并显示它们在屏幕上(它稍后会变成一种图表,但我还没有完全做到)。但不幸的是,我遇到了一些问题......
我决定将所有点依次存储在地址中,类型为字符串,如下所示:
string p;
string * pointer = &p;
p = "5, 3";
*(&p+1) = "6, 4";
*(&p+2) = "7, 5";
cout << *pointer << *(pointer+1) << *(pointer+2);
或者这个:
string p;
string * pointer = &p;
p = "5, 3";
*(pointer+1) = "6, 4";
*(pointer+2) = "7, 5";
cout << *pointer << *(pointer+1) << *(pointer+2);
但是每当我到达第 4 行或第 5 行时,我在 memcpy 程序集的这一行上得到一个错误:
mov [edi],al ;U - write second byte to destination
显然这行不通...
我开始怀疑它与指针指向由 char 数组组成的字符串类型的地址这一事实有关,但我不确定为什么以及如何......如果现在是这样,为什么甚至可以使用字符串指针?
无论如何,任何解决方案/解释都值得赞赏,真的。我过去并没有真正使用那么多指针,所以如果我遗漏了一些明显的东西,请原谅。但如前所述,我已尝试搜索此内容,但找不到任何内容。
最佳答案
您的第一个代码甚至无法编译。
您的第二个代码尝试将值存储到 std::string
对象中,这些对象大概位于内存中的 p
之后。但是内存中p
之后没有std::string
对象。任何将任何东西“存储”到那些不存在的对象中的尝试都会导致未定义的行为。
如果您将 p
声明为数组
string p[3];
string * pointer = p;
*pointer = "5, 3"; // same as `p[0] = "5, 3"`
*(pointer+1) = "6, 4"; // same as `p[1] = "6, 4"`
*(pointer+2) = "7, 5"; // same as `p[2] = "7, 5"`
cout << *pointer << *(pointer+1) << *(pointer+2);
然后第二个版本的代码会安全地将字符串存储到该数组的连续元素中。
但是您现在所拥有的一切都没有意义。而且目前还不清楚您要做什么。
关于c++ - 指向 int 类型的指针在 C++ 中不能正常协作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162177/