【问题标题】:Adding integers with pointers in C在 C 中使用指针添加整数
【发布时间】:2011-03-08 00:54:22
【问题描述】:

假设我有int *a, int *b, int *c 并说ab 已经指向一些整数。

我想将整数向下相加 ab 并将它们保存到 c 指向的任何地方

这个:

*c = *a + *b;

不起作用。它总是吐出“'unary *'的无效参数。为什么会这样?

附加信息: 这是我尝试实现它的方式:

int getCoordinates(int argc, char *argv[], FILE *overlay, FILE *base, int *OVx, int *OVy, int *OVendx, int  *OVendy, int *Bx, int *By, int *Bendx, int *Bendy) 
{

     ... // OVx and OVw are assigned here.  I know it works so I won't waste your time with this part.

     // Set overlay image's x and y defaults (0,0).
     *OVx = 0;
     *OVy = 0;
     ...

     OVendx = (*OVx) + (*OVw);
     OVendy = (*OVy) + (*OVh);

【问题讨论】:

  • 它适用于我的机器。你到底有什么问题?
  • 您确定正确分配了值吗? This example 工作正常。 (请注意,您必须取消引用指针才能查看值。您可能不会这样做。)
  • 你有没有初始化指针c指向一个有效的内存位置?
  • 看来您需要取消对分配的引用:*OVendx = (*OVx) + (*OVw);您的版本只是移动指针。
  • 我们中的一些人也有同样的怀疑。同样,在发布问题时,请不要遗漏识别错误的关键行。

标签: c pointers int memory-address addition


【解决方案1】:

这是一个工作示例:

#include <stdio.h>

int main( int argc, const char* argv[] )
{
    int x = 1;
    int y = 2;
    int z = 0;
    int *a = &x;
    int *b = &y;
    int *c = &z;

    *c = *a + *b;

    printf( "%d + %d = %d\n", *a, *b, *c );
    return 1;
}

运行产量:

./a.out 
1 + 2 = 3

您可能遇到的常见错误:

  1. 未将 a、b 或 c 指向有效 记忆。这将导致您的程序崩溃。
  2. 打印值 指针 (a) 而不是它的值 指向 (*a)。这将导致显示非常大的数字。
  3. 不取消引用赋值 c = *a + *b 而不是 *c = *a + *b。在这种情况下,当您在赋值后尝试取消引用 c 时,程序将会崩溃。

【讨论】:

    【解决方案2】:

    如果 Ovendx、Ovendy 指向一个有效的内存位置,那么要将值分配给该位置,您需要取消对它们的引用。所以,应该是——

    (*OVendx) = (*OVx) + (*OVw);
    (*OVendy) = (*OVy) + (*OVh);
    

    您没有在发布的 sn-p 中取消引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多