C中的指针功能不起作用

时间:2014-02-10 13:02:12

标签: c function pointers

我打算让我的指针打印该值,但它只是停止工作(没有来自MinGW的错误报告)。 。

    #include<stdio.h>

    void point_here(int *yolo) {
      int you = 2014;
      yolo = &you;

    }


    main () {
      int *punk = NULL;

      point_here(punk);
      printf("Punk @ %d is not dead\w/.\n", *punk);

   }

如何使这项工作?为什么这不起作用?请解释。我是指针和C的新手,在读完东西后仍然感到困惑。

4 个答案:

答案 0 :(得分:0)

C是“按值调用”;函数获取调用者值的副本,而不是对它们的引用。如果更改函数内部的参数,则调用者的上下文中不会发生任何事情。

要解决这个问题,你需要使用显式指针,但即使你仍然没有一个指向函数内局部变量的指针,该指针超出了该函数的运行范围。

答案 1 :(得分:0)

你将NULL作为一个参数传递给一个实际上没有任何东西的函数。然后你尝试取消引用那个非法的NULL指针。

答案 2 :(得分:0)

您修改后的代码版本效果很好:

#include <stdio.h>

void point_here(int *yolo) {
  *yolo = 2014;
}

int main () {
  int value = 0;
  int *punk = &value;
  point_here(punk);
  printf("Punk @ %d is not dead\w/.\n", *punk);
  return 0;
}

正如其他人所说,您有以下问题:

  • 函数完成执行后,指向函数值的指针不起作用
  • 您没有将指针传递给传递指针值的指针。 (换句话说,你不是在编辑你认为你的样子)。

我通过传入已经分配的指针修复了这两个问题,然后你只需在函数中修改它。这是使用指针的一种标准方法。祝你好运!

答案 3 :(得分:-1)

有两个问题。首先,指针变量是按值传递的,其次是变量“you”在堆栈上,一旦函数返回就会丢失。

将变量更改为静态,如

static int you = 2014;

并将参数更改为** yolo;