【问题标题】:Char Pointer address assigned to address of integer pointerChar 分配给整数指针地址的指针地址
【发布时间】:2012-09-26 19:05:23
【问题描述】:

至少我认为我正在尝试做一些非常简单的事情,但没有成功。我想将整数指针指向的地址分配给 char 指针指向的地址。示例

//C++

int *pointerint;
char *pointerchar;
pointerchar = pointerint;

//

我尝试了几种不同的方法但没有成功。

例子:

pointerchar = (char *) &pointerint;

编译器将其排除在外,但分配给指针的地址为零。那不可能是正确的。谁能告诉我如何正确执行此操作以及我做错了什么。提前感谢您的所有帮助。

【问题讨论】:

  • 从答案中可以看出,这确实非常简单……但是为什么要这样做?这通常是一种危险的操作,尤其是在新手手中。

标签: c++ c pointers


【解决方案1】:

尝试(如果 C):

pointerchar = (char *) pointerint;

【讨论】:

  • 这是正确的,但是为了扩展,您在那里所做的是类型转换了指针的地址。由于pointerint 已经是一个指针,所以不需要再次使用& 运算符。
  • 这里我转换的是指针的值而不是指针的地址(OP 做了什么)。
  • @LuchianGrigore 我假设他初始化了pointerint 指针。
  • 即使没有初始化pointerint,它也可以工作。你只是在复制号码。您要更改的只是所指向数据的语义。
  • @slugonamission 一个未初始化的指针是一个无效的指针,访问(甚至只是读取它)一个无效的指针是未定义的行为。
【解决方案2】:

既然你有一个 C 的答案,下面是一个 C++ 的答案:

int *pointerint;  
char *pointerchar;
//initialize pointerint
pointerchar = reinterpret_cast<char*>(pointerint);

请注意,如果您不初始化 pointerint,您将遇到未定义的行为。

【讨论】:

  • 指针?你的意思是“如果你不初始化pointerint”......你只需设置pointerchar并且不需要初始化它。
  • @JimBalter 是的。我正是这个意思。 :)
  • 我永远喜欢 C++ 答案,:) +1
  • 是的,这是正确的答案,这也适用于 C,初始化指针是关键!另外,我需要为最终指针减去 3 以在字中的 MSB 字节 0 处开始 char 指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多