设置指向数组c ++的指针

时间:2015-10-11 22:12:08

标签: c++ arrays pointers

我对CS有这个问题。我使用代码p3 = &s1[3];但是当我在p3时,它会显示值而不是地址。这是预期的,问题是对的还是我做错了什么?

  

鉴于以下声明:

int i = 3, j, *p1 = &i, *p2;
char s1[20] = "Wow, more pointers!", *p3;
     

编写使p3等于第四个地址的语句   s1的元素。

5 个答案:

答案 0 :(得分:4)

流的<<运算符有几个重载。其中一个需要char*,并打印一个字符串(从该地址开始的一系列字符,直到下一个0)。另一个采用void*(指向任何东西的指针),并打印它指向的地址。

如果你自己将指针强制转换为void*,它将强制编译器选择打印地址的void*重载:

cout << (void*)p3;

您的指针分配没有错;问题出在你打印时。

答案 1 :(得分:2)

这就是std :: cout如何对待(char *)。这个question包含全面的答案。

答案 2 :(得分:0)

通过分配给*p3您没有修改指针p3,您正在修改它指向的内存。要修改指针p3本身,只需指定p3

答案 3 :(得分:0)

作业要求您使&#34; p3 等于s1&#34;的第四个元素的地址,但您要将地址分配给 *p3 ,而不是p3

{p> *p3p3指向的内容。 p3是地址。

顺便说一下*p3 = &s1[3]; shouldn't even compile。如果是,请启用编译器警告和错误。

答案 4 :(得分:-1)

TVJS

因为元素位于s1 + 0,s1 + 1,s1 + 2,s1 + 3,...

请注意,这完全等同于:

p3 = s1+3;

...而且一些对指针算法感到不舒服的人可能更喜欢这样。我个人更喜欢我给的第一个版本。