【问题标题】:C++ Pointer Assignment Clarification [duplicate]C ++指针分配说明[重复]
【发布时间】:2016-04-21 23:02:38
【问题描述】:

例如,当我有什么不同时,

int var1, *ptr;
ptr = &var1; // the pointer ptr copies the address of var1, hence ptr points to var1?

int var1, *ptr;
ptr = var1; // ptr points to var1, but does not have the address of var1, so can not change the value of address var1? 

int *var1, *ptr;
*ptr = *var1; // copy value of var1 into the location pointed to by ptr?

我的 cmets 正确吗?

【问题讨论】:

  • int var1, *ptr; ptr = var1; 格式不正确。编译器应该抱怨。
  • *ptr = *var1; 也是格式错误的:var1 不能应用 *
  • 不同之处在于只有第一个格式正确。其他两个不会编译。您对第一个示例的评论会更好,例如“ptr 的值被分配了 var1 的地址,因此 ptr 指向 var1”。第二个和第三个例子的cmets都不正确,可以替换为“赋值无效”。

标签: c++ pointers variable-assignment


【解决方案1】:

第二个 (ptr = var1) 和第三个 (*ptr = *var1) 选项错误。

在第二种情况下,您要求ptr 指向一个用var1 编写的地址。 IE。 var1 整数值将被解释为地址。可能不是您想要的,并且会导致编译器错误或警告。

在第三种情况下,您试图取消引用不是指针的东西 (*var1)。绝对是编译器错误。

【讨论】:

  • var1 在第三种情况下是指向 int 的指针。
【解决方案2】:
int var1, *ptr;
ptr = &var1; 

获取int变量var1的地址,并将该地址分配给变量ptr

int var1, *ptr;
ptr = var1; 

var1分配给ptr。这需要演员表。

int *var1, *ptr;
*ptr = *var1; 

var1指向的值赋值给ptr指向的值。 (请注意,正如所写,它们都未初始化的指针指向不确定的位置,如果它们存在,则保存未确定的值。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多